一、类
1、类,结构,共享体,模板类、模板函数。
类和结构:之间的唯一区别是默认访问权限不一样。
共享体:成员变量共享内存。
模板类,模板函数:定义template <class T, int i> 可传递类型或者是值,可使代码得到重用,且不影响类型检查。
二、类的成员函数
1、构造函数
拷贝构造函数:初始化列表不使用此构造函数。A(const A& a) A a = b(调用该函数)
赋值构造函数: A& operate =(const A& a) A a; a=b(调用该函数)
默认构造函数:A()
一个参数的构造函数:A(int i) A a = 1;
隐式调用此构造函数 如果此构造函数声明为explicit则该式报错,只能A a(1);
2、析构函数: ~A()
3、纯虚函数:virtual void XX()=0 子类必须覆盖。
4、虚函数:virtual void XX()可被覆盖,只在被子类生成的基类实体调用才有意义。
(1)、每个类的实体都会生成一个虚函数表,来维护虚函数。
(2)、虚函数表的结构类似邻接表,如图
4、const函数:XX()const; 不能修改成员变量。
5、static函数:类的函数,被所有实体共享,实体也可调用。
三、类的成员变量
1、static 类型变量:初始化int A:c=1;定义static int c;类的所有实体共享的变量;只会被初始化一次。
2、const 类型变量:只能在初始化列表中初始化,初始化后不能被修改。
3、const static 类型变量:需要在定义的时候同时初始化。
4、mutable 类型变量:可以被const函数修改;const类型实体的该成员变量可以被修改。
四、类生命过程
基类构造函数->子类构造函数->子类析构函数->基类析构函数。
五、类访问权限
public(static,const,普通)可在本类以外的地方使用。
protected 可被自己或者孩子使用。
private 可被自己使用。
利用虚函数表可以使用基类private修饰的虚函数。
友元函数,友元类:打破此权限控制,具体做法:将自己在A类中注册为friend 后,则可以调用A的任何函数或者变量。
六、类的继承性
所有成员(static,const,普通)皆可被继承。
如果是private(public,protected)继承的话,从基类继承的成员都将转为private((public,protected),protected)。
七、类的内存结构
按照声明先后顺序依次排列,可以像数组一样用{}初始化(成员变量必须都是公有的、没有用户定义的构造函数)。