fork download
  1. #include <iostream>
  2.  
  3. class A1 {
  4. public:
  5. virtual void print() const
  6. {
  7. std::cout << "A1::print() called." << std::endl;
  8. }
  9. };
  10.  
  11. class A2: public A1 {
  12. public:
  13. void print() const override
  14. {
  15. std::cout << "A2::print() called." << std::endl;
  16. }
  17. };
  18.  
  19. class B1 {
  20. public:
  21. void print() const
  22. {
  23. std::cout << "B1::print() called." << std::endl;
  24. }
  25. };
  26.  
  27. class B2: public B1 {
  28. public:
  29. void print() const
  30. {
  31. std::cout << "B2::print() called." << std::endl;
  32. }
  33. };
  34.  
  35. using namespace std;
  36.  
  37. int main(void)
  38. {
  39. A2 a2;
  40. cout << "Calling a2.print(): ";
  41. a2.print();
  42. A1 &a1 = a2;
  43. cout << "Calling a1.print(): ";
  44. a1.print();
  45. B2 b2;
  46. cout << "Calling b2.print(): ";
  47. b2.print();
  48. B1 &b1 = b2;
  49. cout << "Calling b1.print(): ";
  50. b1.print();
  51. return 0;
  52. }
  53.  
Success #stdin #stdout 0s 16064KB
stdin
Standard input is empty
stdout
Calling a2.print(): A2::print() called.
Calling a1.print(): A2::print() called.
Calling b2.print(): B2::print() called.
Calling b1.print(): B1::print() called.