fork download
  1. #include <iostream>
  2.  
  3. using namespace std;
  4.  
  5. class B{
  6.  
  7. public:
  8.  
  9. virtual void f(){cout << "f() - B" << endl;}
  10. virtual void h() = 0;
  11. virtual ~B(){cout << "~B() destructor" << endl;}
  12.  
  13. protected:
  14.  
  15. int b;
  16. };
  17.  
  18. class D1: virtual public B{
  19.  
  20. public:
  21.  
  22. void f(){cout << "f() - D1" << endl;}
  23. virtual ~D1(){cout << "~D1() destructor" << endl;}
  24.  
  25. protected:
  26.  
  27. int d1;
  28. };
  29.  
  30. class D2: virtual public B{
  31.  
  32. public:
  33.  
  34. void f(int i){cout << "f(" << i << ") - D2" << endl;}
  35. virtual void h(){cout << "h() - D2" << endl;}
  36. virtual ~D2(){cout << "~D2() destructor" << endl;}
  37.  
  38. protected:
  39.  
  40. int d2;
  41. };
  42.  
  43. class D3: public D1{
  44.  
  45. public:
  46.  
  47. void h(){cout << "h() - D3" << endl;}
  48.  
  49. private:
  50.  
  51. int d3;
  52. };
  53.  
  54. class D4: public D1, public D2{
  55.  
  56. public:
  57.  
  58. using D1::f; using D2::f;
  59.  
  60. virtual ~D4(){cout << "~D4() destructor" << endl;}
  61.  
  62. private:
  63.  
  64. int d4;
  65. };
  66.  
  67. int main()
  68. {
  69. B *pB;
  70. pB = new D4;
  71. dynamic_cast<D4*>(pB)->f(3);
  72. delete pB;
  73. }
Success #stdin #stdout 0s 15240KB
stdin
Standard input is empty
stdout
f(3) - D2
~D4() destructor
~D2() destructor
~D1() destructor
~B() destructor