#include class Base { public: Base() { std::cout << "base default constructor\n";} Base(int i) { std::cout << "base parameters constructor\n";} Base(Base const & src) { std::cout << "base copy constructor\n"; *this = src;} Base & operator=(Base const & rhs) { std::cout << "base assignation operator\n"; return *this;} ~Base() { std::cout << "base default destructor\n";} }; class Derived : public Base { public: Derived() { std::cout << "derived default constructor\n";} Derived(int i) { std::cout << "derived parameters constructor\n";} Derived(Derived const & src) { std::cout << "derived copy constructor\n"; *this = src;} Derived & operator=(Derived const & rhs) { std::cout << "derived assignation operator\n"; return *this;} ~Derived() { std::cout << "derived default destructor\n";} }; int main () { Base base1(1); std::cout << "\n"; Derived derived1(1); std::cout << "\n"; Base base2(derived1); std::cout << "\n"; Derived derived2(base1); return 0; }