码迷,mamicode.com
首页 > 其他好文 > 详细

虚继承

时间:2015-08-26 19:29:53      阅读:118      评论:0      收藏:0      [点我收藏+]

标签:

 

技术分享
 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 }
View Code

 

  记录一下代码,没有默认构造器的情况下,初始化需要把所有相关的虚函数加进去。

  因为类A只有一个副本,所以最终只是初始化了一次。

 

 

——written by LyonLys

虚继承

标签:

原文地址:http://www.cnblogs.com/LyonLys/p/4761185.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!