1. 吸收基类成员
改造基类成员:函数名相同且参数表相同,不然为重载。
新建基类成员
2. 派生类对象可以作为基类的对象使用,但只能使用从基类继承的成员函数。
B b1; D d1; b1=d1;
3. 派生类构造函数:先调用基类构造函数,再调用内嵌对象的构造函数,虚基类的构造函数在非虚基类的构造函数之前。基类构造函数按照派生类定义时继承的顺序,内嵌对象的构造函数按照申明顺序。最后自己 3 2 1 1 2 3 D。
class Deriver:public base 2, public base 1, virtual public base 3{
private:
Base 1 member 1;
Base2 member 2;
Base3 member 3;
改造基类成员:函数名相同且参数表相同,不然为重载。
新建基类成员
2. 派生类对象可以作为基类的对象使用,但只能使用从基类继承的成员函数。
B b1; D d1; b1=d1;
3. 派生类构造函数:先调用基类构造函数,再调用内嵌对象的构造函数,虚基类的构造函数在非虚基类的构造函数之前。基类构造函数按照派生类定义时继承的顺序,内嵌对象的构造函数按照申明顺序。最后自己 3 2 1 1 2 3 D。
class Deriver:public base 2, public base 1, virtual public base 3{
private:
Base 1 member 1;
Base2 member 2;
Base3 member 3;
}
4. 二义性:可以使用成员名限定来消除二义性,也就是在成员名前用对象名及基类名来限定。
Deriver d; d.fun();
d.Base1::fun(); d.Base2::fun()