1、类的封装
C++中类的封装:
- 成员变量:C++中用于表示类属性的变量
- 成员函数:C++中用于表示类行为的函数
-
C++中可以给成员变量和成员函数定义访问级别
-
public
:成员变量和成员函数可以在类的內部和外界访问和调用 -
private
:成员变量和成员函数只能在类的内部被访问和调用
-
#includestruct 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; // private修饰两个属性,定义访问级别为私有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.age = 20; // 编译不过 g.print(); // 通过print()去访问 b.age = 19; // ok b.weight = 120; b.height = 180; // err b.print(); return 0;}
2、类成员的作用域
类成员的作用域:
- 类成员的作用域都只在类的内部,外部无法直接访问
- 成员函数可以直接访问成员变量和调用成员函数
- 类的外部可以通过类变量访问
public
成员 - 类成员的作用域与访问级别没有关系
C++中用struct
定义的夫中所有成员默认为 public
#includeint 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; 访问默认命名空间,即全局作用域 // printf("test.i = %d\n", test.i); // Error, test.i是私有的 printf("test.j = %d\n", test.j); // test.j = 4 printf("test.getI() = %d\n", test.getI()); // test.getI() = 3 return 0;}
3、小结
类通常可以分为使用方式和内部细节两部分类的封裝机制使得使用方式和内部细节相分离
C++中通过定义类成员的访问级别实现封装机制
public成员可以在类的内部和外界访问和调用
private成员只能在类的内部被访问和调用