当前位置: 代码迷 >> 综合 >> C++(类和封装-----第15课)
  详细解决方案

C++(类和封装-----第15课)

热度:23   发布时间:2024-01-24 07:11:56.0

由于工作需要先封装类,所以先跳过前面的知识,直接听这一节课。

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成员只能在类的内部被访问和调用

  相关解决方案