// Demonstration of construction and destruction order. #include #include using namespace std; class Base1{ public: int i; string s; Base1(int i, string s): i(i), s(s){ cout << "Base1 constructor" << endl; } ~Base1(){ cout << "Base1 destructor" << endl; } }; class Base2{ public: int j; bool b; Base2(int j, bool b): j(j), b(b){ cout << "Base2 constructor" << endl; } ~Base2(){ cout << "Base2 destructor" << endl; } }; class Derived: public Base1, public Base2{ // Declaration order: Base1 before Base2 public: double d; Derived(double d, int i, string s): Base1(i+1, s+s), Base2(i+2, false), d(d){ cout << "Derived constructor" << endl; } ~Derived(){ cout << "Derived destructor" << endl; } }; int main(){ Derived d1(5.0, 1, "AP"); // Base1 constructor // Base2 constructor // Derived constructor // Derived destructor // Base2 destructor // Base1 destructor }