两个类继承于同一个基类,并共享基类的数据,即内存。代码如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
|
#include <iostream>
using
namespace
std;
//---------------------------------------------------------------------------
class
Atest
{
//基类
public
:
int
i;
};
class
Btest :
virtual
public
Atest
//继承时使用了virtual关键字
{
//继承类
public
:
void
set(
int
value)
{
i = value;
}
void
show()
{
cout << i <<endl;
}
};
class
Ctest :
virtual
public
Atest
{
//继承类
public
:
void
set(
int
value)
{
i = value;
}
void
show()
{
cout << i << endl;
}
};
class
Dtest:
public
Btest,
public
Ctest
{
//同时继承了两个中间类
};
int
main(
int
argc,
char
* argv[])
{
Dtest d;
d.i = 20;
d.Btest::set(1290);
//改写数据i
d.Ctest::show();
//读出数据i
system
(
"pause"
);
return
0;
}
//---------------------------------------------------------------------------
|
这个一个棱形类的继承结构,如果去掉virtual关键字,会出现二义性,编译出错。采用虚基类后,中间任何一个子类改写基类数据i,另一个类型都能读出同样的数据。
本文转自Chinayu201451CTO博客,原文链接:http://blog.51cto.com/9233403/1968681 ,如需转载请自行联系原作者