您的位置:首页 > 其它

多继承时的构造函数调用的顺序

2014-01-17 00:03 190 查看
调用顺序是:虚基类——直接基类——子对象——派生类

我们假设一个非常复杂的情况:

class A;

class B: virtual public A;

class C: virtual public A;

class E;

class D:public B, public C

其中E是D的子对象

首先说明,构造函数的调用顺序,跟D中的构造函数调用个类的成员函数的顺序无关

因为B和C都是虚继承自A,所以首先调用都在A的构造函数,然后根据类D继承B,C的顺序调用B,C的构造函数;

然后调用子对象构造函数,因为构造子对象E是构造D的任务的一部分

下面是完整代码:

#include<iostream>
using namespace std;
class A
{
public:
A(char a1)
{
cout<<"constructor A called"<<endl;
}
};
class B:virtual public A
{
public:
B(char a1,char b1):A(a1)
{
cout<<"constructor B called"<<endl;
}
};
class C:virtual public A
{
public:
C(char a1,char c1):A(a1)
{
cout<<"constructor C called"<<endl;
}
};
class E
{
public:
E(char e1)
{
cout<<"constructor E called"<<endl;
}
};
class D:public B,public C 		//继承的顺序决定了构造的先后
{
char d;
E e;
public:
//派生类成员初始化列表可以随意,所以我故意打乱了顺序
D(char a1,char b1,char c1,char d1,char e1):C(a1,c1),B(a1,b1),e(e1),d(d1),A(a1)
{
cout<<"constructor D called"<<endl;
}
};
int main()
{
D d('1','2','3','4','5');
}


输出结果:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: