能不能解释一下C++中虚继承的工作原理

 我来答
V18867942223信
2017-04-10 · 超过19用户采纳过TA的回答
知道答主
回答量:75
采纳率:0%
帮助的人:15.2万
展开全部
首先,Class A包含一个虚函数,所以sizeof(A)的结果是 sizeof(虚表)的大小,也就是4字节。
Class B继承Class A,所以Class B一定是包含Class A,只是包含的方式不同。

普通继承,Class A的虚表会和Class B的虚表合并,所以Class B中还是保留一个虚表就可以了。此时sizeof(B)的结果就是4.

虚继承,Class A和Class B的关系就会微妙很多。由于C++支持多继承,所以某些情况下会出现下图中的继承关系。这种水晶继承会导致Class D中包含两份Class A的对象。此时就会出现访问歧义的情况。

虚继承就可以避免上面的情况。Class A的数据会被放到虚表中。Class D会识别到来自Class B和C的虚表,然后将两者合并。所以回到本件问题,问题中的Class B就会包含一份虚函数表指针,一份虚类指针。也就是sizeof(B)的结果是8。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式