标签:
1 #include <bits/stdc++.h> 2 using namespace std; 3 4 class Ap { 5 public: 6 Ap(int a) { 7 this->a = a; 8 cout << "constructor Ap " << a << endl; 9 } 10 virtual ~Ap() {} 11 12 int a; 13 } ; 14 15 class A : public Ap { 16 public: 17 A(int a) : Ap(a) { 18 cout << "constructor A " << a << endl; 19 } 20 virtual ~A() {} 21 22 virtual void F1() { 23 cout << "A F1" << endl; 24 } 25 26 virtual void F2() { 27 cout << "A F2" << endl; 28 } 29 } ; 30 31 class B1 : virtual public A { 32 public: 33 B1(int a) : A(a) { 34 cout << "constructor B1 " << a << endl; 35 } 36 virtual ~B1() {} 37 38 virtual void F1() { 39 cout << "B1" << endl; 40 } 41 } ; 42 43 class B2 : virtual public A { 44 public: 45 B2(int a) : A(a) { 46 cout << "constructor B2 " << a << endl; 47 } 48 virtual ~B2() {} 49 50 //virtual void F2() { 51 //cout << "B2" << endl; 52 //} 53 } ; 54 55 class C : public B1, public B2 { 56 public: 57 C(int a) : A(a), B1(a), B2(a) { 58 cout << "constructor C " << a << endl; 59 } 60 virtual ~C() {} 61 62 virtual void F2() { 63 a = 1; 64 cout << "C" << endl; 65 } 66 } ; 67 68 void F2(A *p) { 69 p->F2(); 70 } 71 72 void F1(A *p) { 73 p->F1(); 74 } 75 76 int main() { 77 A a(1); 78 B1 b1(2); 79 B2 b2(3); 80 C c(4); 81 82 cout << a.a << ‘ ‘ << b1.a << ‘ ‘ << b2.a << ‘ ‘ << c.a << endl; 83 F1(&c); 84 F2(&a); 85 F2(&b2); 86 F2(&c); 87 cout << a.a << ‘ ‘ << b1.a << ‘ ‘ << b2.a << ‘ ‘ << c.a << endl; 88 89 return 0; 90 }
记录一下代码,没有默认构造器的情况下,初始化需要把所有相关的虚函数加进去。
因为类A只有一个副本,所以最终只是初始化了一次。
——written by LyonLys
标签:
原文地址:http://www.cnblogs.com/LyonLys/p/4761185.html