【发布时间】:2011-05-31 16:39:07
【问题描述】:
这个问题是萦绕在我脑海中的一大疑问,也很难用语言来描述。有时它似乎很明显,有时却很难破解。所以问题是这样的::
类基{ 民众: int a_number; 根据(){} 虚空函数 1() {} 虚空函数 2() {} 无效函数3(){} }; 类派生:公共基础{ 民众: 派生():基(){} void function1() {cout << "从基础派生" << endl; virtual void function4() {cout 函数4(); // 将给出编译错误!! b_ptr->函数1(); // 调用 Derived 类的重写方法 返回0; }
Q1。虽然 b_ptr 指向 Derived 对象,但它访问哪个 VTABLE 以及如何?因为 b_ptr -> function4() 给出了编译错误。还是 b_ptr 在派生的 VTABLE 中只能访问该大小的基类 VTABLE?
Q2。既然 Derived 的内存布局必须是 (Base,Derived) ,那么 Base 类的 VTABLE 是否也包含在 Derived 类的内存布局中?
Q3。既然Vtable基类的function1和function2指向Base类的实现,Derived类的function2指向Base类的function2,那么Base类中真的需要VTABLE吗? (这可能是我能问过的最愚蠢的问题,但在我目前的状态下我仍然对此表示怀疑,答案必须与 Q1 的答案相关:))
请评论。
谢谢你的耐心。
【问题讨论】:
-
是的,是的,是的。只有一个“否”才会成为一个有趣的答案。
标签: c++ inheritance polymorphism vtable