Я пытаюсь использовать dynamic_cast - безуспешно. У меня есть класс BASE и класс A, производный от BASE. Я хочу иметь указатель на объект класса BASE, который я позже хочу привести к классу А. Я явно не делаю это правильно. Следующий код компилируется:
#include <cstdio>
class BASE {
private:
int i;
public:
BASE(void) {i = 1; }
virtual ~BASE(){}
virtual void id() { printf("CLASS BASE\n"); }
};
class A : public BASE {
public:
A(void): BASE() {}
A(const BASE & base) : BASE(base) {}
A& operator = (const BASE & base) { static_cast<BASE&>(*this) = base; return *this; }
void id() override { printf("CLASS A\n"); };
};
int main() {
BASE* base = new BASE();
base->id();
A* a = new A(*base);
a->id();
A* anotherA = dynamic_cast<A*>(base);
if(!anotherA)
printf("anotherA is NULL\n");
else
anotherA->id();
}
но его запуск дает:
CLASS BASE
CLASS A
anotherA is NULL
Я уверен, что упускаю что-то очень простое, но я продолжаю смотреть на код и не вижу, что я делаю неправильно. Буду очень признателен за любую помощь.
Я смотрел на
Когда следует использовать static_cast, dynamic_cast, const_cast и reinterpret_cast?
но не понимаю, почему dynamic_cast не работает - разве это не простое уныние?