1. 继承的关系
(1) protected保护在子类继承后,只能子类自己使用;
2. 父类的构造函数不能被继承,在被继承的时候,会自动对成员进行初始化;
(1) 子类中如果需要用到构造函数,需要自己定义;
(2) 默认情形下,父类的无参构造函数会被调用;
(3) 如果需要调用父类有参数的构造函数,需要在类中定义;
(4) 构造函数在生成的时候,会优先调用父类,析构的时候会最后析构父类;
3. 多重继承
(1) 定义:一个类有多个父类关系;
(2) 菱形继承:命令冲突;
(3) 虚基类:在类前面加上visual关键字,这样在继承的时候才会只继承一份;
(4) 多态:通过在父类中定义一个指针,指向子类,
(5) 虚函数:在函数前面机上virtual关键字,定义子类对象的时候,
4. 多态构成的条件:
(1) 必须存在继承关系;
(2) 继承关系父类和子类必须存在同名的虚函数;
(3) 必须存在父类的指针,通过指针来调用虚函数;
/*系统根据具体的对象不同调用不同的函数*/
5. 覆盖,重载以及隐藏
(1) 重写条件:父类子类函数名相同,返回值相同,有virtual关键字;
(2) 重载:函数名相同但是参数不同;
(3) 隐藏:子类的函数会屏蔽父类的同名函数,不需要关心virtual关键字;
/*思考:隐藏是否会占据空间 ? */
6. C++的编译过程
(1) 联编:
① 静态联编:
② 动态联编:
7. 抽象类:
(1) 纯虚函数:没有函数体,只有函数申明,在函数最后加上= 0;
(2) 抽象类:含有纯虚函数的类
① 抽象类不能创造类型,只能继承对象;
8. 虚析构函数
(1) 构造函数无法被申明为虚函数,因为类在初始化的时候,才会被分配地址;
(2)
9. 理解A *p = new B,其中B是A的子类,p->C,其中,C为函数
(1) 当C为virtual函数时,p指针指向B的空间,当C不为virtual函数,P指针指向A的空间;
(2) 子函数在调用delete的时候,会默认调用子类的析构函数和父类的析构函数;