1. 定义格式
class
<派生类名>
: [
<继承方式>
]
<基类名1>
, [
<继承方式>
]
<基类名2>
,…
基类名2>
继承方式>
基类名1>
继承方式>
派生类名>
{
<成员说明表>成员说明表>
};
2. 重复继承——虚基类
在多继承中,如果直接基类有公共的基类,则会出现重复继承。这样,公共基类中的数据成员在多继承的派生类中皆有多个拷贝。
如:
class A { int x; }; class B: public A{}; class C: public A{}; class D: public B, public C{}; //此时D用有两个x成员B::x 和 C::x
为了解决这样的问题,要使用虚基类。
1)虚基类的构造函数有最新派生出的类的构造函数调用
2)虚基类的构造函数优先非虚基类的构造函数执行
class A { int x; public: A(int i) {x=i;} }; class B: virtual public A { int y; public: B(int i): A(1) {y=i;} }; class C: virtual public A { int z; public: C(int i): A(2) {z=i;} }; class D: public B, public C { int m; public: D(int i, int j, int k): B(i),C(j),A(3){m=k;} }; class E: public C { int n; public: E(int i, int j, int k, int l): D(i,j,k),A(4){n=1;} }; D d(1,2,3); E e(1,2,3,4);
当创建D对象d时,所调用的构造函数的顺序是:
A(3), B(1), C(2), D(1,2,3);
当创建E对象e时,所调用的构造函数的顺序是:
A(4), B(1), C(2), D(1,2,3), E(1,2,3,4)
发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/222432.html原文链接:https://javaforall.net
