一个抽象基类多重继承后是啥样,该怎么处理
一个抽象基类多重继承后是啥样
假如上面是三个接口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
- 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