fork download
  1. #include <iostream>
  2. using namespace std;
  3.  
  4. struct A
  5. {
  6. virtual void f() {std::cout << "A\n";}
  7. };
  8. struct B : public A
  9. {
  10. virtual void f() {std::cout << "B\n";}
  11. };
  12.  
  13. int main()
  14. {
  15. A* a = new B;
  16.  
  17. B* b = dynamic_cast<B*>(a);
  18.  
  19. b->f();
  20.  
  21. B& br = dynamic_cast<B&>(*a);
  22.  
  23. br.f();
  24.  
  25. try
  26. {
  27. A* a2 = new A;
  28. B& fail = dynamic_cast<B&>(*a2);
  29. }
  30.  
  31. catch(std::exception& e)
  32. {
  33. cout << e.what() << "\n";
  34. }
  35.  
  36. return 0;
  37. }
  38.  
  39.  
Success #stdin #stdout 0.02s 2812KB
stdin
Standard input is empty
stdout
B
B
std::bad_cast