由于工作需要先封装类,所以先跳过前面的知识,直接听这一节课。
1.类的封装
类通常分为以下两个部分
类的实现细节
类的使用方式
当使用类时,不需要关系其实现细节
当创建类时,才需要考虑其内部实现细节
C++中类的封装
成员变量:C++中用于表示类属性的变量
成员函数:C++中用于表示类行为的函数
C++中可以给成员变量和成员函数定义访问级别
public:成员变量和成员函数可以在类的内部和外界访问和调用
private:成员变量和成员函数只能在类的内部被访问和调用
实例1:
#include <stdio.h>
#include <stdio.h>
struct Biology
{bool living;
};
struct Animal : Biology
{bool movable;void findFood(){ }
};
struct Plant : Biology
{bool growable;
};
struct Beast : Animal
{void sleep() { }
};
struct Human : Animal
{void sleep() { printf("I'm sleeping...\n");}void work() { printf("I'm working...\n");}
};
struct Girl : Human
{
private:int age;int weight;
public:void print(){age = 22;weight = 48;printf("I'm a girl, I'm %d years old.\n", age);printf("My weight is %d kg.\n", weight);}
};
struct Boy : Human
{
private:int height;int salary;
public:int age;int weight;void print(){height = 175;salary = 9000;printf("I'm a boy, my height is %d cm.\n", height);printf("My salary is %d RMB.\n", salary);}
};
int main()
{Girl g;Boy b;g.print(); //调用g的print属性,类的内部变量属性不能被直接访问b.age = 19;b.weight = 120;//b.height = 180;b.print();return 0;
}
运行结果
I'm a girl, I'm 22 years old.
My weight is 48 kg.
I'm a boy, my height is 175 cm.
My salary is 9000 RMB.
2.类成员的作用域
类成员的作用域都只在类的内部,外部无法直接访问
成员函数可以直接访问成员变量和调用成员函数
类的外部可以通过类变量访问public成员
类成员的作用域与访问级别没有关系(访问级别是针对外部使用的)
C++中用struct定义的类中所有成员默认为public
实例2:
#include <stdio.h>
int i = 1;
struct Test
{
private:int i;
public:int j;int getI(){i = 3;return i;}
};
int main()
{int i = 2;Test test;test.j = 4;printf("i = %d\n", i); // i = 2; 局部变量printf("::i = %d\n", ::i); // ::i = 1;全局作用域,:: 访问默认命名空间i变量// printf("test.i = %d\n", test.i); // Error,私有变量printf("test.j = %d\n", test.j); // test.j = 4printf("test.getI() = %d\n", test.getI()); // test.getI() = 3return 0;
}
小结
类通常可以分为使用方式和内部细节两部分
类的封装机制使得使用方式和内部细节相分离
C++中通过定义类成员的访问界别实现封装机制
public成员可以在类的内部和外界访问和调用
private成员只能在类的内部被访问和调用