26 class a{
27 public:
28 a(){cout << "a" << endl;}
29 ~a(){cout << "~a" << endl;}
30 };
45 class x:virtual public a{
46 public:
47 x(){cout<<"x" << endl;}
48 ~x(){cout<<"~x" << endl;}
49 };
50 class y:virtual public a{
51 public:
52 y(){cout<<"y" << endl;}
53 ~y(){cout<<"~y" << endl;}
54 };
55 class z:public x,public y{
56 public:
57 z(){cout <<"z" << endl;}
58 ~z(){cout <<"~z" << endl;}
59 };
结果就是
a
x
y
z
~z
~y
~x
~a
(注意构造函数以及析构函数的调用位置)
如果
45 class x: public a{
46 public:
47 x(){cout<<"x" << endl;}
48 ~x(){cout<<"~x" << endl;}
49 };
50 class y:public a{
51 public:
52 y(){cout<<"y" << endl;}
53 ~y(){cout<<"~y" << endl;}
54 };
55 class z:public x,public y{
56 public:
57 z(){cout <<"z" << endl;}
58 ~z(){cout <<"~z" << endl;}
59 };
结果就是
a
x
a
y
z
~z
~y
~a
~x
~a