1、类的对象是局部变量,在栈区存储,先进后出
class a;
class b;
执行顺序:
构造函数a--构造函数b--析构函数b--析构函数a
2、拷贝构造函数
类同名、形参是类对象的引用
3、浅拷贝与深拷贝
默认构造函数只是对成员简单的赋值,不能为指针成员开辟空间,所以delete的时候会出错 浅拷贝
不仅仅可以进行数据拷贝,也可以分配内存空间 深拷贝
Circle::Circle(Circle &a)
{
this->r = a.r;
this->str = new char[strlen(a) + 1];
strcpy(this->str,a.str);
}
4、友元函数(类)
为了访问类内的私有成员,在对应的类中声明友元函数
实现:void func(class a)(cout<<a.r;)
友元函数(类)不属于这个类,所以不能使用this指针,也不能被继承
5、构造函数赋值和初始化列表
初始化列表的方式更有效率
const修饰的成员必须初始化,也只能在列表初始化
一些自定义类型只能在列表初始化
对于一般内置类型(char int),两种区别不大
6、static成员变量必须初始化,并且要在类外
7、const对象(函数)只能访问const成员函数(变量)
8、类的二义性:A(基类),B、C是A的派生类,D是B、c的派生类,则A的成员在D中存在歧义
解决方案:使用虚基类,即B、C继承A时 bc加上virtual,这样派生类和基类就只维护一个基类对象 ,避免多次拷贝,出现歧义
9、多态:同样的方法被不同的对象执行会有不同的结果