在c++里面一切事物均为对象,对象上有属性和行为。
1)封装的意义
class A
{
int a = 2; //属性(成员变量、成员属性)
int multiNumber(int a) //行为(成员函数、成员方法)
{
return 2a;
}
}
将属性和行为作为一个整体,表现生活中的事物。
2)访问权限
将属性和行为加以权限控制。
公共权限 | public | 类内类外可以访问 |
保护权限 | protected | 内类可以访问、类外不能访问 |
私有权限 | private | 内类可以访问、类外不能访问 |
protected权限和private权限在继承的时候体现区别。使用public继承时可以通过子类访问父类protected作用域下的成员。
将成员设为私有权限的作用:
可以自己控制读写权限、检测数据的有效性。
3)构造函数和析构函数
构造函数:实例化类(初始化对象)
析构函数:对象销毁前系统自动调用,执行清理工作(例:释放堆取数据)
深浅拷贝问题:
c++默认提供的拷贝构造函数为浅拷贝,即拷贝属性所在的内存空间。
当类有指针属性时需要考虑深拷贝的问题,对于指针数据,浅拷贝只是拷贝了指针指向的内存空间,这样会带来堆取数据重复释放的问题。例如 Person b = a,当a析构完毕之后,a产生的堆区空间被释放掉,那么在b中对应的堆取数据也被释放掉,这时候再去操作b对象,就会出现访问野指针或者重复释放兑取数据的问题。
解决方法:不适用默认拷贝构造函数,重写拷贝构造函数,对于堆区数据,需重新开辟空间加以拷贝。
4)成员变量和成员函数分开储存
非静态成员变量占用对象空间
静态成员变量不占用对象空间(静态成员变量内类声明,类外必须初始化)
函数不占用对象空间