fork download
  1. #include<iostream>
  2. using namespace std;
  3. class A//базовый класс
  4. {
  5. int aa;
  6. public:
  7. A(){cout<<"Конструктор1 класса А"<<endl;}
  8. A(int AA):aa(AA){cout<<"Конструктор2 класса А"<<endl;}
  9. ~A(){cout<<"Деструктор класса А"<<endl;}
  10. };
  11.  
  12. class B:virtual public A//производный класс(первый базовый для D)
  13. {
  14. char bb;
  15. public:
  16. B(){cout<<"Конструктор1 класса B"<<endl;}
  17. B(int AA, char BB):A(AA), bb(BB)
  18. {cout<<"Конструктор2 класса B"<<endl;}
  19. ~B(){cout<<"Деструктор класса B"<<endl;}
  20. };
  21. class C:virtual public A//производный класс(второй базовый для D)
  22. {
  23. float cc;
  24. public:
  25. C(){cout<<"Конструктор1 класса C"<<endl;}
  26. C(int AA, float CC):A(AA), cc(CC)
  27. {cout<<"Конструктор2 класса C"<<endl;}
  28. ~C(){cout<<"Деструктор класса C"<<endl;}
  29. };
  30. class D:public C, public B//производный класс(IIуровня)
  31. {
  32. int dd;
  33. public:
  34. D(){cout<<"Конструктор1 класса D"<<endl;}
  35. D(int AA, char BB, float CC, int DD):
  36. A(AA),B(AA,BB), C(AA,CC),dd(DD)
  37. {cout<<"Конструктор2 класса D"<<endl;}
  38. ~D(){cout<<"Деструктор класса D"<<endl;}
  39. };
  40.  
  41. int main()
  42. {
  43. D d(1, 'a', 2.3, 4);
  44. D dd;
  45. return 0;
  46. }
Success #stdin #stdout 0s 3344KB
stdin
Standard input is empty
stdout
Конструктор2 класса А
Конструктор2 класса C
Конструктор2 класса B
Конструктор2 класса D
Конструктор1 класса А
Конструктор1 класса C
Конструктор1 класса B
Конструктор1 класса D
Деструктор класса D
Деструктор класса B
Деструктор класса C
Деструктор класса А
Деструктор класса D
Деструктор класса B
Деструктор класса C
Деструктор класса А