fork download
  1. #include <iostream>
  2.  
  3. struct B
  4. {
  5. virtual ~B() {} // виртуальный деструктор нужен для правильного удаления
  6. };
  7.  
  8. struct D : B
  9. {
  10. void f() { std::cout << "D::f()\n"; }
  11. };
  12.  
  13.  
  14. int main() {
  15.  
  16. B* b = new D;
  17.  
  18. // b->f(); // Ошибка компиляции
  19. D* d = dynamic_cast<D*>(b); // Выясняем является ли переменная b типом D
  20. if( d )
  21. {
  22. d->f(); // Вызываем только если действительно является
  23. }
  24.  
  25. delete b;
  26.  
  27. return 0;
  28. }
Success #stdin #stdout 0s 3428KB
stdin
Standard input is empty
stdout
D::f()