rt,看到47页,有一问题不大明白,看到IUnknown接口的定义,它明明就是一个纯虚基类。但是书上却特地搞个方框出来强调:
“
非虚拟继承:
注意IUnknown并不是虚拟基类。IX和IY并不能按虚拟方式继承IUnkown,这是由于会导致与COM不兼容的vtbl.若IX和IY按虚拟方式继承IUnkonw,那么IX和IY的vtbl重的头三个函数指向的将不是IUnkonwn的三个成员函数。”请问怎么理解这个问题,谢谢了
“
非虚拟继承:
注意IUnknown并不是虚拟基类。IX和IY并不能按虚拟方式继承IUnkown,这是由于会导致与COM不兼容的vtbl.若IX和IY按虚拟方式继承IUnkonw,那么IX和IY的vtbl重的头三个函数指向的将不是IUnkonwn的三个成员函数。”请问怎么理解这个问题,谢谢了
在CA中必然会破坏IX或者IY中某一个的IUnknown
那么再把CA转换为IX和IY成为接口,此时就出问题了,IX IY中至少有一个的头三个函数不是IUnknown的那三个
interface IX : virtual public IUnknown
{
};
我说的意思是"...注意IUnknown并不是虚拟基类"这句话,它明明是个纯虚拟基类啊,为什么不是虚拟基类
不过还有点意思的是在VC6中对IUnknown的定义中,还包含了一个模板函数
虚拟基类,算是一种继承方式,如果虚拟继承的话,它的基类就成为虚拟基类.注意一点,叫做虚拟基类,没有虚拟类的说法吧