次のコードで:
#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);
}
仮想としてマークし、Bでオーバーロードしたにもかかわらず、Aの合計が呼び出されるのはなぜですか?実行時に、vtableの助けを借りてB :: sum()を呼び出すべきではありませんか?