多重继承、钻石继承、虚继承
1、多重继承
在C++中子类可以有多个父类,按照继承表的顺序继承父类中的所有成员,并按照继承表调用父类的构造函数。
在子类中按照继承顺序排列父类,并且会标记每个父类的位置。
当父类的指针或引用指向子类对象时,编译器会自动计算出父类在子类中的位置。
2、钻石继承
假如一个子类继承了多个父类,而这多个父类有一个共同的父类,爷爷类中的成员会在孙子类中存在多份,这种继承叫钻石继承。
这种继承并不会产生错误,孙子类访问祖先的成员时必须使用 父类名::成员名,重点是这种继承方式会造成冗余浪费内存。
注意:在创建孙子类时会多次调用祖先类的构造函数,销毁函数类时也会多次调用祖先类的析构函数。
3、虚继承 virtual
在进行钻石结构继承时,如果父类继承祖先类时使用了virtual关键字,那么在孙子类中只保留一份祖先类的成员,也只会调用一次祖先类的析构、析构、拷贝函数。
注意:使用虚继承时子类中会多一个指针指向从父类中继承的成员。