class D: public A, private B, protected C{
...
public:
D(int a, int b, int c, int d) :A(a), B(b), C(c){
...
}
};
构造函数的调用按class-d-public-a-private-b-protected-c中基类的顺序从左到右依次执行然后再是初始化符表中的对象成员此例中没有最后才是自身因此总的顺序是a-b-c-d">构造函数的调用按class D: public A, private B, protected C中基类的顺序从左到右依次执行,然后再是初始化符表中的对象成员(此例中没有),最后才是自身,因此总的顺序是A->B->C->D。
综合例子
#include<iostream>usingnamespacestd;
class A{
int a;
public:
A(int n){ a = n; cout << "A::a = " << a << endl; }
~A(){ cout << "A destructed!" << endl; }
};
class B{
int b;
public:
B(int n){ b = n; cout << "B::b = " << b << endl; }
~B(){ cout << "B destructed!" << endl; }
};
class C:public A{
int c;
public:
C(int na, int nc) :A(na){ c = nc; cout << "C::c = " << c << endl; }
~C(){ cout << "C destructed!" << endl; }
};
class D :public B, public C{
int d;
public:
D(int nb, int nc1, int nc2, int nd) :B(nb), C(nc1, nc2){ d = nd; cout << "D::d = " << d << endl; }
~D(){ cout << "D destructed!" << endl; }
};
int main(){
D obj(1, 2, 3, 4);
}
输出
B::b = 1A::a = 2C::c = 3D::d = 4
D destructed!
C destructed!
A destructed!
B destructed!