Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <string>
- class Super
- {
- protected:
- int superVal;
- public:
- Super(int val) : superVal{val} { std::cout << "Super constructed for " << this << '\n'; };
- Super() : Super{ 777 } {};
- ~Super() { std::cout << "Super destructed for " << this << '\n'; }
- };
- class BaseA : public Super
- {
- int fieldA;
- public:
- BaseA(int val) : Super{1}, fieldA { val } { std::cout << "BaseA constructed for " << this << '\n'; };
- BaseA() : BaseA{ 42 } {};
- ~BaseA() { std::cout << "BaseA destructed for " << this << '\n'; }
- void print() { std::cout << "BaseA: " << fieldA << " superVal = " << superVal << '\n'; };
- };
- class BaseB: public Super
- {
- int fieldB;
- public:
- BaseB(int val) : Super{ 2 }, fieldB{ val } { std::cout << "BaseB constructed for " << this << '\n'; };
- BaseB() : BaseB{ 33 } {};
- ~BaseB() { std::cout << "BaseB destructed for " << this << '\n'; }
- void print() { std::cout << "BaseB: " << fieldB << " superVal = " << superVal << '\n'; };
- };
- class ChildAB : public BaseA, public BaseB
- {
- int fieldAB;
- public:
- ChildAB(int val) : fieldAB{ val } { std::cout << "ChildAB constructed for " << this << '\n'; };
- ChildAB() : ChildAB { 555 } {};
- ~ChildAB() { std::cout << "ChildAB destructed for " << this << '\n'; }
- void print() { std::cout << "ChildAB: " << fieldAB << " superVal = " << BaseA::superVal << ' ' << BaseB::superVal << '\n'; };
- };
- int main()
- {
- //std::cout << "BaseA...\n";
- //BaseA a;
- //a.print();
- //std::cout << "BaseB...\n";
- //BaseB b;
- //b.print();
- //std::cout << '\n';
- std::cout << "ChildAB...\n";
- ChildAB child;
- child.print();
- //std::cout << sizeof(ChildAB) << " &child = " << &child << '\n';
- //std::cout << '\n';
- //child.ChildAB::print();
- //std::cout << sizeof(ChildAB) << " &child = " << &child << '\n';
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement