一个抽象基类多重继承后是啥样,该怎么处理
一个抽象基类多重继承后是啥样C/C++ codeIUnknown{virtual HRESULT QueryInterface(...) 0virtual ULON
一个抽象基类多重继承后是啥样
C/C++ codeIUnknown{ 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