虚继承执行顺序
虚基类的执行顺序有点不懂嘛。于是找了一个例题。打个断点看看。(代码在最后)
1.先调用D的构造函数,在D的构造函数中调用A(父类的构造函数)
2. 返回D的构造函数
3. 在调用B的构造函数
4. 再返回 D的构造函数
#### 5. 再调用C的构造函数
6. 再返回D的构造函数
7. 执行 D构造函数的内容。
参考文章
C++虚继承的概念
源代码如下:
#include "stdafx.h"
#include<iostream>
using namespace std;
class A {
public :
A(char * str){
cout << str << endl;
}
~A(){}
};
class B :virtual public A {
public:
B(char * str1, char * str2):A(str1) {
cout << str2 << endl;
}
~B(){}
};
class C :virtual public A {
public:
C(char* str1, char * str2) :A(str1) {
cout << str2 << endl;
}
~C(){}
};
class D : public B, public C {
public:
D(char* str1,char * str2,char * str3,char *str4):B(str1,str2),C(str1,str3),A(str1){
cout << str4 << endl;
}
};
int main() {
D * d = new D("class a","class b","class c","class d");
delete d;
getchar();
return 0;
}