bra*_*ter 0 c++ constructor virtual-functions vtable
在以下代码中:
#include <iostream>
using namespace std;
class A {
public:
A() {
cout << " A constructor \n";
sum(2,4);
}
virtual int sum(int a, int b){
cout << "Base sum \n";
return a + b;
}
};
class B : public A {
public:
B() : A() {
cout << " B constructor \n";
}
int sum(int a, int b){
cout << "Overloaded sum \n";
return (a + b) * 10;
}
};
int main(){
A* a = new B();
// a->sum(4,5);
}
Run Code Online (Sandbox Code Playgroud)
为什么即使我将A标记为虚拟并在B中重载它,也会调用A的总和?在运行时,在vtable的帮助下不应该调用B :: sum()吗?
因为当你调用方法时,a它还不是类型的对象B.
避免virtual从构造函数调用方法:它会导致意外的结果(当然,除非你期望这种确切的行为,在这种情况下你会被发现).
在运行时,在vtable的帮助下不应该调用B :: sum()吗?
不是真的,因为对象不具备vtable的B,在这一点上.