实践是检验真知的唯一标准啊
#include <iostream>
#include <stdio.h>
using namespace std;
class V {
public:
V(){
printf("V constructor.....\n");
}
V(int k) {
printf("V %d constructor.....\n", k);
}
~V() {
printf("V destructor......\n");
}
};
class S {
public:
S(){
printf("S constructor.....\n");
}
S(int k) {
printf("S %d constructor.....\n", k);
}
~S() {
printf("S destructor......\n");
}
};
class A {
public:
A(){
printf("A constructor.....\n");
}
A(int k) {
printf("A %d constructor.....\n", k);
}
~A() {
printf("A destructor......\n");
}
};
class B : public A, public S, virtual public V{
public:
B(int x, int y, int z):test1(x), test3(z), test2(y) {
printf("B %d %d %d constructor.....\n", x,y,z);
}
~B() {
printf("B destructor......\n");
}
private:
S test1;
A test2;
V test3;
};
int main()
{
B b(1,2,3);
return 0;
}
结果是
V constructor.....
A constructor.....
S constructor.....
S 1 constructor.....
A 2 constructor.....
V 3 constructor.....
B 1 2 3 constructor.....
B destructor......
V destructor......
A destructor......
S destructor......
S destructor......
A destructor......
V destructor......
就是先执行虚基类,再按顺序执行父类,再按顺序执行类成员的构造,最后才是自己的构造函数执行。析构则是刚好相反哈
原文:http://blog.csdn.net/sina012345/article/details/44538625