首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

一个抽象基类多重继承后是啥样,该怎么处理

2012-03-21 
一个抽象基类多重继承后是啥样C/C++ codeIUnknown{virtual HRESULT QueryInterface(...) 0virtual ULON

一个抽象基类多重继承后是啥样

C/C++ code
IUnknown{    virtual HRESULT QueryInterface(...) = 0;     virtual ULONG AddRef(...) = 0;     virtual ULONG Release(...) = 0;};IX:public IUnknown {/*...*/};IY:public IUnknown {/*...*/};Class CA:public IX,public IY {/*...*/};

假如上面是三个接口IUnknown、IX、IY和一个COM组件类CA,在《COM技术内幕》一书中说:IX、IY不能按虚拟方式继承IUnknown,这是由于会导致COM组件不兼容的vtbl(虚拟函数表),若IX、IY按虚拟方式继承IUnknown,那么IX、IY的vtbl(虚拟函数表)中的头三个函数指向的将不是IUnknown的三个成员函数。

我记得C++的语言书说过以虚拟继承方式去继承一个共同基类,是为了保证共同基类只有一份,可是上面的例子没有按照虚拟继承方式去继承一个共同的抽象基类,那间接派生类Class CA是什么样的内存结构呢,它的虚拟函数表又是什么样的呢?为什么上面说,要是按虚拟方式继承,头三个函数指向的将不是IUnknown的三个成员函数?

[解决办法]
lz可以去翻翻 深入理解对象模型 一书, 具体细节我也忘记了。
[解决办法]
MSDN上面有解释
http://msdn.microsoft.com/en-us/library/wcz57btd.aspx

热点排行