在下面的代码中,由于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;'。 –