Результатом этой программы является «Метод B». Как экземпляр родительского объекта может вызвать функцию дочернего класса через static_cast?
Чтобы еще больше запутать ситуацию, если я сделаю метод() виртуальным, то этот код выведет «Метод А».
Кто-нибудь может объяснить, что здесь происходит?
class A {
public:
void method() {
cout << "Method A" << endl;
}
};
class B : public A {
public:
void method() {
cout << "Method B" << endl;
}
};
int main() {
A a;
B* bptr = static_cast<B*>(&a);
bptr->method();
}
cout << "Method B" << endl;
не имеет значительных побочных эффектов. - person πάντα ῥεῖ   schedule 15.04.2016dynamic_cast
. - person πάντα ῥεῖ   schedule 15.04.2016dynamic_cast
для понижения - person Nacho   schedule 15.04.2016B b; A* aptr = dynamic_cast<A*>(&b); aptr->method();
Кроме того, почему этот метод вывода также выводит B? Как преобразовать родительский указатель в дочерний объект, чтобы я мог вызывать родительский метод вместо дочерних? - person Dante   schedule 15.04.2016dynamic_cast
. Причина, по которой это работает, та же, что и в моем вступительном комментарии. - person πάντα ῥεῖ   schedule 15.04.2016B::method
ни к чему не обращается, это может быть и бесплатная функция. Создайте член вB
и попробуйте что-нибудь сделать с ним вB::method
. Посколькуa
неB
, вы, вероятно, взорветесь. - person David   schedule 15.04.2016static_cast
: stackoverflow.com/q/32506579/2642059 Очевидно для этого требуется, чтобы программист разработал код, чтобы приведение было законным ... чего здесь, конечно, не было сделано. - person Jonathan Mee   schedule 15.04.2016