在下面的代碼中,由於name()是虛擬的,所以我期望派生結構的方法將被調用。相反,寫出來的是「A」。爲什麼?static_cast和C++中的虛擬方法
#include <iostream>
using namespace std;
struct A {
virtual string name() { return "A"; }
};
struct B : A {
string name() { return "B"; }
};
int main (int argc, char *argv[]) {
B b;
cout << static_cast<A>(b).name() << endl;
return 0;
}
多態性僅適用於通過方法指針或引用調用。你基本上完成了'A tmp = b; cout << tmp.name()<< endl;'。 –