摘要:
[代码]如上代码,首先如果不在D的继承中,将一个父类(B或C)加上virtual关键字的继承的话,编译会出错,因为在D中会有两条路径继承A的f()函数,会产生冲突。然后D的对象直接调用f()也会出错,会有二义性,解决方法是加上类的修饰符。如D d; d.B::f();d.A::f(); 阅读全文
摘要:
最近我们在工作中碰到一个奇怪的问题,最后确定是多继承引起的指针漂移,跟C++对象模型有关。示意如下:class A {...};class B{...};class AB : public B, publicA {...}...AB *pab = new AB();A* pa = (A*)pab;B* pb = (B*)pab;这时候你发现pa和pb的值是不一样的!它们中有一个跟pab是相等的,而... 阅读全文