C++继承——特殊点
同名成员
当父子有相同的成员的时候,加上作用域::可以来选择访问具体的成员。
同名函数
如果子类中出现父类同名的函数,那么子类会隐藏掉父类的所有同名函数,如果想要访问的话也添加作用域就好了
同名静态成员
静态成员是在类初始化前就初始化,属于类外的东西,静态成员函数只能使用静态成员变量。
和同名成员、同名函数的处理方式是一样的。也是用作用域来处理。
多继承语法
多继承可能会引发父类中有同名成员出现,需要添加作用域区分,所以不太建议用多继承
class 子类: test1,test2,,,,,
当父类中出现同名的成员,也添加作用域处理就好了。
菱形继承
两个派生类继承同一个基类
又有某个类同时继承这两个派生类
这种继承被称为菱形继承,或者钻石继承
菱形继承的问题
1 羊继承了动物的数据,驼也同样继承了动物的数据,当草泥马使用数据的时候,就会产生二义性
2 草泥马继承自动物的数据基础了两份,但是只需要一份就好了。
当出现菱形继承的时候,两个父类要访问用作用域区分就好
在继承前添加关键字virtual,被继承的类就称为虚基类。
当产生了虚继承后,子类会在最前面的字节产生一个指针来虚基类表,虚地址表的前四个字节内容是该指针距离所在类的偏移,后四个字节的值为该指针和虚基类的偏移