码迷,mamicode.com
首页 > 编程语言 > 详细

c++ 虚继承

时间:2015-06-20 15:36:28      阅读:216      评论:0      收藏:0      [点我收藏+]

标签:

问题描述


在看irrlicht源码时,注意到如下的继承方式:

class IrrlichtDevice: public virtual IRefenceCounted

{

};

不解,遂翻书查找得到解答,果然是书没认真看啊,同时就这点来说读代码是一种很好学习方法。

虚继承说明


在《c++ primer》中文版第五版的第717页作者举了一个例子【1】很好的说明了情况,这里我就照办了。

IO标准库的iostream和ostream分别继承了一个共有的名为base_ios的抽象基类。该抽象基类负责保存流的缓冲内容并管理流的条件状态。iostream是另外一个类,它从istream和ostream直接继承而来,可以同时读写流的内容。因为istream和ostream都继承自base_ios,所以iostream继承了base_ios两次,一次通过istream,另一次通过ostream。

这就导致了一个问题,一个iostream对象肯定是希望在同一个缓冲区中进行操作。所以如果有两份拷贝,则上述的共享就无法实现了。

在c++中,虚继承的目的是令某个类做出声明,承诺愿意共享它的基类。其中,共享的基类子对象称为虚基类。这样,不论虚基类在继承体系中出现了多少次,在派生类中都只包含唯一一个共享的虚基类子对象。

简单的说就是,为了解决B、C同时继承A,而D又继承B、C时,D中有两个A的副本的问题【2】。

参考索引


【1】《c++ primer中文版》:第五版 ,(美)李普曼(Lippman,S.B.),(美)拉乔伊(Lajoie,J.),(美)默(Moo,B.E.)

【2】http://bbs.chinaunix.net/thread-1782309-1-1.html

c++ 虚继承

标签:

原文地址:http://www.cnblogs.com/keikain/p/4590518.html

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