|| 继承的用处:减少重复代码
语法: class 子类:继承方式 父类 {};
|| 继承方式:
public --- 公有继承 ---无法访问父类私有成员,其他成员照常继承
protected --- 保护继承 ---无法访问父类私有成员,其他成员变为保护权限后继承
private --- 私有继承 ---无法访问父类私有成员,其他成员变为私有权限后继承
|| 继承中构造和析构顺序 (类比以其他类的对象作为一个类的成员变量时的情况)
共同点:被包含在内部的先构造,外部的后构造(先内后外),析构时相反(栈)
继承中构造和析构顺序
构造顺序:先支类再主类
析构顺序:先主类再支类(相反)
以其他类的对象作为一个类的成员变量时的情况
构造顺序:先支类再主类
析构顺序:先主类再支类(相反)
|| 继承同名成员处理方式(包括静态成员和非静态成员)
问题:当子类与父类出现同名的成员,如何通过子类对象,访问到子类或父类中同名的数据呢?
访问子类同名成员 直接访问即可
访问父类同名成员 需要加作用域
注意事项:访问父类同名的重载函数时,也必须加上作用域来进行访问。(父类中的同名函数
的参数会被编译器隐藏,无法区分重载函数)
只要是调用父类同名函数,都加上作用域就好
|| 多继承
C++允许一个类继承多个类 (一个儿子可以有多个父亲)
语法: class 子类 :继承方式 父类1 , 继承方式 父类2 {};
|| 菱形继承
菱形继承:
[---]
/ \
[---] [---] 近亲杂交
\ /
[---]
菱形继承的缺点:
1,二义性,需要指出定义域
2,资源浪费,底部的子类一般会有多个重复属性 — 解决办法:虚继承
|| 虚继承 virtual (一般在菱形继承中使用)
语法: class 子类 :virtual 继承方式 虚基类(父类){};
class 子类 :virtual 继承方式 虚基类(父类){};
class 子子类: 继承方式 子类, 继承方式 子类 {};