Advertisement
avr39ripe

PV913MultiInheritanceMaadness

Jul 21st, 2020
110
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.78 KB | None | 0 0
  1. #include <iostream>
  2. #include <string>
  3.  
  4. class Super
  5. {
  6. protected:
  7.     int superVal;
  8. public:
  9.     Super(int val) : superVal{val} { std::cout << "Super constructed for " << this << '\n'; };
  10.     Super() : Super{ 777 } {};
  11.     ~Super() { std::cout << "Super destructed for " << this << '\n'; }
  12. };
  13.  
  14. class BaseA : public Super
  15. {
  16.     int fieldA;
  17. public:
  18.     BaseA(int val) : Super{1}, fieldA { val } { std::cout << "BaseA constructed for " << this << '\n'; };
  19.     BaseA() : BaseA{ 42 } {};
  20.     ~BaseA() { std::cout << "BaseA destructed for " << this << '\n'; }
  21.     void print() { std::cout << "BaseA: " << fieldA << " superVal = " << superVal << '\n'; };
  22. };
  23.  
  24. class BaseB: public Super
  25. {
  26.     int fieldB;
  27. public:
  28.     BaseB(int val) : Super{ 2 }, fieldB{ val } { std::cout << "BaseB constructed for " << this << '\n'; };
  29.     BaseB() : BaseB{ 33 } {};
  30.     ~BaseB() { std::cout << "BaseB destructed for " << this << '\n'; }
  31.     void print() { std::cout << "BaseB: " << fieldB << " superVal = " << superVal << '\n'; };
  32. };
  33.  
  34. class ChildAB : public BaseA, public BaseB
  35. {
  36.     int fieldAB;
  37. public:
  38.     ChildAB(int val) : fieldAB{ val } { std::cout << "ChildAB constructed for " << this << '\n'; };
  39.     ChildAB() : ChildAB { 555 } {};
  40.     ~ChildAB() { std::cout << "ChildAB destructed for " << this << '\n'; }
  41.     void print() { std::cout << "ChildAB: " << fieldAB << " superVal = " << BaseA::superVal << ' ' << BaseB::superVal << '\n'; };
  42. };
  43.  
  44. int main()
  45. {
  46.     //std::cout << "BaseA...\n";
  47.     //BaseA a;
  48.     //a.print();
  49.     //std::cout << "BaseB...\n";
  50.     //BaseB b;
  51.     //b.print();
  52.  
  53.     //std::cout << '\n';
  54.     std::cout << "ChildAB...\n";
  55.     ChildAB child;
  56.     child.print();
  57.     //std::cout << sizeof(ChildAB) << " &child = " << &child << '\n';
  58.     //std::cout << '\n';
  59.     //child.ChildAB::print();
  60.  
  61.     //std::cout << sizeof(ChildAB) << " &child = " << &child << '\n';
  62.  
  63. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement