cppopp
关于虚函数和虚继承的一点思考
今天写了个测试程序
1
#include
"
stdafx.h
"
2
#include
"
iostream
"
3
4
using
namespace
std;
5
6
class
a
{
7
public
:
8
char
k[
3
];
9
virtual
int
aa();
10
}
;
11
12
class
b:
public
virtual
a
13
{
14
15
public
:
16
char
m[
3
];
17
virtual
int
bb();
18
}
;
19
20
class
c:
public
virtual
b
21
{
22
public
:
23
char
s[
3
];
24
virtual
int
cc();
25
}
;
26
27
int
_tmain(
int
argc, _TCHAR
*
argv[])
28
{
29
30
cout
<<
"
sizeof(a)=:
"
<<
sizeof
(a)
<<
endl;
31
cout
<<
"
sizeof(b)=:
"
<<
sizeof
(b)
<<
endl;
32
cout
<<
"
sizeof(c)=:
"
<<
sizeof
(c)
<<
endl;
33
34
return
0
;
35
}
运行结果为:
这个结果很容易理解,sizeof(a)为 aa[3] + 虚指针的大小,也即4+4 = 8(经过一次数据对齐)。
sizeof(b)就为 b自身的大小8 + sizeof(a)+指针大小 = 8 +8 +4 = 20;
sizeof(c)和b的大小算法类似 为 =8+ 20 + 4 =32
那如果程序改成非虚继承那么结果是什么样呢?
1
#include
"
stdafx.h
"
2
#include
"
iostream
"
3
4
using
namespace
std;
5
6
class
a
{
7
public
:
8
char
k[
3
];
9
virtual
int
aa();
10
}
;
11
12
class
b:
public
a
13
{
14
15
public
:
16
char
m[
3
];
17
virtual
int
bb();
18
}
;
19
20
class
c:
public
b
21
{
22
public
:
23
char
s[
3
];
24
virtual
int
cc();
25
}
;
26
27
int
_tmain(
int
argc, _TCHAR
*
argv[])
28
{
29
30
cout
<<
"
sizeof(a)=:
"
<<
sizeof
(a)
<<
endl;
31
cout
<<
"
sizeof(b)=:
"
<<
sizeof
(b)
<<
endl;
32
cout
<<
"
sizeof(c)=:
"
<<
sizeof
(c)
<<
endl;
33
34
return
0
;
35
}
36
运行结果为:
那么这个结果就有点意思,到底是为什么呢?
http://www.diybl.com/course/3_program/c++/cppjs/2007927/74925.html
有详细的解释。
posted on 2011-12-01 10:06
sheng
阅读(348)
评论(0)
编辑
收藏
引用
只有注册用户
登录
后才能发表评论。
【推荐】100%开源!大型工业跨平台软件C++源码提供,建模,组态!
网站导航:
博客园
IT新闻
BlogJava
知识库
博问
管理
导航
C++博客
首页
新随笔
联系
聚合
管理
<
2012年8月
>
日
一
二
三
四
五
六
29
30
31
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
1
2
3
4
5
6
7
8
统计
随笔 - 27
文章 - 0
评论 - 4
引用 - 0
常用链接
我的随笔
我的评论
我参与的随笔
留言簿
(1)
给我留言
查看公开留言
查看私人留言
随笔档案
2018年11月 (1)
2016年8月 (2)
2016年6月 (1)
2016年4月 (4)
2013年4月 (1)
2013年3月 (1)
2013年1月 (1)
2012年11月 (5)
2012年8月 (3)
2012年6月 (1)
2012年5月 (1)
2012年4月 (3)
2011年12月 (3)
收藏夹
timer
(rss)
同行
(rss)
同行
搜索
最新评论
1. re: windows 下进程是否启动检测
这种方法还有缺陷的
如果在多用户的机器下, 不同的用户下看不到对方用户下的进程
--leng
2. re: windows 下进程是否启动检测
这个没有必要用互斥对象吧,只是读进程表而已@augustheart
--sheng
3. re: windows 下进程是否启动检测
不用互斥对象么?
--augustheart
4. re: 设计模式之策略模式[未登录]
Good...
--eryar
阅读排行榜
1. 利用boost 来进行xml解析(13269)
2. DLL中传递STL参数,vector对象作为dll参数传递等问题(转)(6655)
3. windows 下检测进程cpu使用率(3705)
4. luabind和c++相互调用(3655)
5. 关于for循环的执行效率问题(3221)
评论排行榜
1. windows 下进程是否启动检测(3)
2. 设计模式之策略模式(1)
3. 设计模式之template method模式(0)
4. 设计模式之观察者模式(0)
5. boost安装(0)