目录
1.继承的概念与定义
1.1继承的概念
1.2继承的定义
2.继承的使用
2.1 派生类和基类的对象赋值转换
2.2 继承里的作用域
3.特殊成员在继承中的变化
3.1 类中的默认成员函数与继承
3.2 友元与继承
3.3 静态成员与继承
4.继承中特殊的多继承
4.1 菱形继承
4.2菱形虚拟继承
5.继承的总结
1.继承的概念与概念
1.1继承的概念
1.2继承的定义
定义格式:
注意事项:
基类是不能给派生类赋值的。派生类中有新成员,如果是基类赋值派生类,新成员会是随机值。
解析及补充:
1.派生类对象可以赋值给 基类的对象/基类的指针/基类的引用。
2.基类的指针/基类的引用 可以通过类型强制转换给 派生类的指针/派生类的引用,但是必须基类指针指向派生类。
2.2 继承里的作用域
解析及补充:
1.在继承中基类和派生类都有独立的作用域。
2.如果基类和派生类中有同名的成员,派生类会屏蔽基类中的同名成员,这种情况可以叫隐藏或重定义。
3.基类和派生类中的成员,只要函数名相同就会构成隐藏(重定义)。
4.为避免隐藏发生,实际应用中继承最好不要用相同的函数名。
3.特殊成员在继承中的变化
3.1 类中的默认成员函数与继承
类中有6个默认成员函数,如图:
这里,主要讲解:构造函数,析构函数,拷贝构造函数,赋值重载函数在继承中的变化。
构造函数:
解析及补充:
1.派生类的构造函数必须先调用基类的构造函数初始化派生类中基类的部分成员,之后才是调用派 生类中的构造函数。
2.如果基类中的构造函数不是默认构造函数,必须在派生类构造函数的初始化列表阶段显示调用。
析构函数:
解析及补充:
1.派生类中析构函数首先调用派生类的析构函数,之后再调用基类的析构函数。
2.只有析构函数的调用是先派生类,后基类。
3.可以理解成 栈先入栈的,后出栈,如图。
拷贝构造函数:
解析:
派生类中的拷贝构造函数必须,先调用基类中的拷贝构造函数,之后调用派生类中的拷贝构造函数。
赋值重载函数:
解析:
派生类中的赋值重载函数必须,先调用基类中的赋值重载函数,之后调用派生类中的赋值重载函数。
4.继承中特殊的多继承
4.1 菱形继承