fork(14) download
  1. #include <iostream>
  2.  
  3. struct base
  4. {
  5. base() { foo() ; } // calls base::foo()
  6. virtual ~base() { foo() ; } // calls base::foo()
  7.  
  8. virtual void foo() const { std::cout << "base::foo\n" ; }
  9. void bar() { foo() ; } // calls ???::foo
  10. };
  11.  
  12. struct derived : base
  13. {
  14. derived() { foo() ; } // calls derived::foo()
  15. virtual ~derived() override { foo() ; } // calls derived::foo()
  16. virtual void foo() const override { std::cout << "derived::foo\n" ; }
  17. };
  18.  
  19. int main()
  20. {
  21. {
  22. derived d ;
  23. // constructor of base class
  24. // base constructor calls foo => base::foo
  25. // constructor of derived class
  26. // derived constructor calls foo => derived::foo
  27.  
  28. base& b = d ;
  29. b.bar() ;
  30. // calls base::bar()
  31. // base::bar calls foo() polymorphically => derived::foo
  32.  
  33. } // the life-time of d is over at this point
  34. // destructor of derived class
  35. // derived destructor calls foo => derived::foo
  36. // destructor of base class
  37. // base destructor calls foo => base::foo
  38. }
  39.  
Success #stdin #stdout 0s 3340KB
stdin
Standard input is empty
stdout
base::foo
derived::foo
derived::foo
derived::foo
base::foo