是多重继承,而不是多态继承。
子类继承了父类的成员变量,即子类的数据存储区为父类变量 + 子类扩展变量,至于成员函数调用,要理解其调用本质,编译器只是把一个类指针暗地里传给了代码区的成员函数。至于 override 是指 virtual 函数,此类函数通过一个虚拟函数表用函数指针调用(即汇编里的间接调用), 而此表指针则被放在类的开始位置。继承时,子类的数据存储区的父类部分的 virtual table 指针被换为子类的函数表指针。
多重继承。假如, C 继承了 A 和 B, 然后
C c;
A* a = &c; //向上强制为 A
B* b = &c; //向上强制为 B. 问题是B的数据区和vtable,如何能自动找到。C++ 用了很复杂的方式完成了多重继承。
回复:有哪位高手给详细讲解一下C++里多态继承的问题(或曰菱形问题)
所有跟帖:
•
觉得C++的发明者们很猪头
-难割难舍中国心-
♂
(719 bytes)
()
03/17/2011 postreply
00:11:46
•
哈哈! 如实转告了。
-π-
♂
(494 bytes)
()
03/17/2011 postreply
07:32:35