Advertisement
avr39ripe

multipleDiamondInheritance

Jul 21st, 2020
104
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 0.89 KB | None | 0 0
  1. #include <iostream>
  2.  
  3. class Super
  4. {
  5. public:
  6.     Super() { std::cout << "Super constructed!\n"; };
  7.     ~Super() { std::cout << "Super destructed!\n"; };
  8. };
  9.  
  10. class BaseA : virtual public Super
  11. {
  12. protected:
  13.     int fieldA;
  14.     BaseA(int f = 42) : fieldA{ f } { std::cout << "BaseA constructed\n"; };
  15. public:
  16.     ~BaseA() { std::cout << "BaseA destructed\n"; };
  17. };
  18.  
  19. class BaseB : virtual public Super
  20. {
  21. protected:
  22.     int fieldB;
  23.     BaseB(int f = 33) : fieldB{ f } { std::cout << "BaseB constructed\n"; };
  24. public:
  25.     ~BaseB() { std::cout << "BaseB destructed\n"; };
  26. };
  27.  
  28. class ChildAB : public BaseA, public BaseB
  29. {
  30.     int fieldC;
  31. public:
  32.     ChildAB(int f = 16) : Super{}, fieldC { f } { std::cout << "ChildAB constructed\n"; }
  33.     ~ChildAB() { std::cout << "ChildAB destructed\n"; };
  34.     void print() { std::cout << fieldA << ' ' << fieldB << ' ' << fieldC << '\n'; };
  35. };
  36.  
  37. int main()
  38. {
  39.     ChildAB t;
  40.     t.print();
  41. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement