设为首页 加入收藏

TOP

C++之易混淆知识点四---虚函数与虚继承(二)
2015-07-24 06:38:07 来源: 作者: 【 】 浏览:97
Tags:混淆 知识点 --- 函数 继承
lass A
{
? ? char k[3];
public:
? ? virtual void aa()
? ? {
?
? ? };
};
class B:public virtual A
{
? ? char j[3];
public:
? ? virtual void bb()
? ? {
? ? ? ??
? ? };
};
class C:public virtual A
{
? ? char i[3];
public:
? ? virtual void cc()
? ? {
? ? ? ??
? ? };
};
class D: public B,public C
{
? ? char n[3];
? ? public:
? ? ? ? virtual void dd()
? ? ? ? {
? ? ? ??
? ? ? ? ?};
};
int main()
{ ? ?
? ? cout<
? ? cout<
? ? cout<
? ? cout<
? ? return 0;
}
复制代码
得到的结果为:8 20 20 36
?
分析如下:
?
1、类sizeof(A,B,C),从前面的分析可以得到结果为8 20 20;
?
2、sizeof(D)=4(指向自己虚函数的虚指针)+4(自己的数据成员)+
?
? ? ? ? ? ? ? ? ? ? 12(父类B的内容,包括数据成员、指向虚函数的虚指针、以及虚基类指针列表vptr_B_A)+
?
? ? ? ? ? ? ? ? ? ? 12(父类C的内容,包括数据成员、指向虚函数的虚指针、以及虚基类指针列表vptr_C_A)+
?
? ? ? ? ? ? ? ? ? ? 4(类A的数据成员)=36。
?
? ? ?可见,类D中只包含了类A的一份副本,虚继承很好地解决了多重继承中的二义性问题。
首页 上一页 1 2 下一页 尾页 2/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇[leetcode]Wildcard Matching 下一篇hdu1285+hdu2467(拓扑排序)

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: