1.派生类的构造函数
1>有参的父类构造函数
class Student:protected Person
{
public:
Student():Person(22,”Penny”)
{
cout<<”Student consructor … “<
3.构造函数和析构函数不能从父类继承下来,是针对自己的。
4.
class Student:protected Person
{
public:
Student():Person()
{
cout<<”Student consructor … “<
5.
派生类构造函数名(总参数列表):(直接)基类构造函数(参数列表){派生类新增成员初始化语句};
6.
初始化列表 只能加在定义当中,不能写在声明当中
7.
有子对象的派生类构造函数
先构造父类,再构造子对象,再构造自己。
初始化列表的顺序没有关系
组合关系:
聚合关系 生命周期没有必然联系
部分和整体的关系 紧密
继承关系
析构的时候顺序为:
先自己,后子对象,再基类
8.多重继承
构造顺序和离诶播啊顺序有关
class C : public B, public A
B -> A -> C
9.多重继承二义性
int main()
{
C c;
c.B::disp();
return 0;
}
A,B都有disp()
c.disp() 会出现ambiguous二义性错误
10.多重继承构造函数
11.虚基类
防止内存浪费
父类指针指向子类对象
子类对象代替父类对象
12.多态
静态多态:函数重载
发生在编译期间
函数覆盖(借助继承和虚函数)
程序的运行时期
虚函数表
虚析构函数的作用:
清理内存
virtual ~Animal()//delete 基类对象的时候,调用子类的析构函数
{
cout<<"~Animal()..."<<endl;
}
纯虚函数
不能实例化对象
抽象类包含一个或多个纯虚函数
抽象类派生的子类需要把抽象类中的纯虚函数实现出来。