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

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

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

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

所有跟帖: 

觉得C++的发明者们很猪头 -难割难舍中国心- 给 难割难舍中国心 发送悄悄话 难割难舍中国心 的博客首页 (719 bytes) () 03/17/2011 postreply 00:11:46

哈哈! 如实转告了。 -π- 给 π 发送悄悄话 (494 bytes) () 03/17/2011 postreply 07:32:35

请您先登陆,再发跟帖!