回复:有哪位高手给详细讲解一下C++里多态继承的问题(或曰菱形问题)

来源: 2011-03-16 07:19:19 [旧帖] [给我悄悄话] 本文已被阅读:

是多重继承,而不是多态继承。

子类继承了父类的成员变量,即子类的数据存储区为父类变量 + 子类扩展变量,至于成员函数调用,要理解其调用本质,编译器只是把一个类指针暗地里传给了代码区的成员函数。至于 override 是指 virtual 函数,此类函数通过一个虚拟函数表用函数指针调用(即汇编里的间接调用), 而此表指针则被放在类的开始位置。继承时,子类的数据存储区的父类部分的 virtual table 指针被换为子类的函数表指针。

多重继承。假如, C 继承了 A 和 B, 然后
C c;
A* a = &c; //向上强制为 A
B* b = &c; //向上强制为 B. 问题是B的数据区和vtable,如何能自动找到。C++ 用了很复杂的方式完成了多重继承。