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

hanyj_3000 2012-02-17 10:50:41

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的三个成员函数?
...全文
100 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
hanyj_3000 2012-02-28
  • 打赏
  • 举报
回复
没解决我的问题哦,不过还是结贴算了
ketet 2012-02-20
  • 打赏
  • 举报
回复
MSDN上面有解释
http://msdn.microsoft.com/en-us/library/wcz57btd.aspx
ryfdizuo 2012-02-17
  • 打赏
  • 举报
回复
lz可以去翻翻 深入理解对象模型 一书, 具体细节我也忘记了。
hanyj_3000 2012-02-17
  • 打赏
  • 举报
回复
网上找了下,只找到以virtual方式继承同一个基类,没找到这种没有用virtual方式继承一个抽象类

64,654

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧