实践是检验真知的唯一标准啊
#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