#include <iostream>
using namespace std;
class A
{
public:
void foo() { cout << "foo in A" << endl; }
};
class B : public A
{
public:
void foo() { cout << "foo in B" << endl; }
};
int main() {
A* a = new B;
a->foo(); // will print "foo in A" because foo is not virtual
B* b = new B;
b->foo(); // will print "foo in B" because static type of b is B
// the problem
A* ab;
ab = dynamic_cast<B*>(new B);
ab->foo(); // will print "foo in A" !!!!!
}
Не меняет ли «dynamic_cast» статический тип ab? Я имею в виду, что логически это швы эквивалентны B * ab = new B; из-за кастинга. Но это не так.
Я думал, что динамическое изменение изменяет статический тип объекта, я не прав? И если да, то в чем разница между:C++ динамическое литье с наследованием
A* ab = dynamic_cast<B*>(new B);
и
A* ab = new B;
Благодаря
Думай о том, что '' dynamic_cast прикладывается к. Каков тип 'нового B'? – juanchopanza