в следующем коде, из-за того, что имя() является виртуальным, я ожидаю, что будет вызван метод производной структуры. И наоборот, что выписывается, это «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; '. –