Если вы знаете наверняка, что у вас есть B*
, что указывает на C
объекта, вы можете использовать пару static_cast
с:
B* bp = new C();
C* cp = static_cast<C*>(bp);
A* ap = static_cast<A*>(cp);
Единственный способ бросить по иерархии наследования является использование dynamic_cast
, который требует, чтобы тип полиморфный (то есть, ваш класс должен иметь по крайней мере одну виртуальную функцию-член, since your base class destructors should be virtual
, это обычно не проблема):
B* bp = new C();
A* ap = dynamic_cast<A*>(bp);
dynamic_cast
имеет дополнительную выгоду, если он не работает (то есть, если bp
на самом деле не указывает на C
), он возвращает NULL. У этого недостатка есть небольшая стоимость исполнения (static_cast
фактически свободна во время выполнения).
Оставьте свой код. C уже является A, поэтому его не нужно отличать. –
Странно. Не могли бы вы скопировать реальный код? – tibur
Извините, ребята, я перепутался, теперь я отправил настоящую проблему – wrongusername