#include class Base { int m_val; public: Base() : m_val(0) { std::cout << "Base::Base()" << std::endl; } Base(const Base& b) : m_val(b.m_val) { std::cout << "Base::Base(copie)" << std::endl; } virtual ~Base() { std::cout << "Base::~Base()" << std::endl; } Base& operator=(const Base& b) { if (&b == this) return *this; std::cout << "Base::operator=(copie)" << std::endl; m_val = b.m_val; return *this; } }; class Deriv : public Base { int m_d; public: Deriv() : Base() , m_d(0) { std::cout << "Deriv::Deriv()" << std::endl; } ~Deriv() { std::cout << "Deriv::~Deriv()" << std::endl; } Deriv(const Deriv& d) : Base(d) , m_d(d.m_d) { std::cout << "Deriv::Deriv(copie)" << std::endl; } Deriv& operator=(const Deriv& d) { if (&d == this) return *this; std::cout << "Deriv::operator=(copie)" << std::endl; m_d = d.m_d; return *this; } }; int main() { Deriv d1; Deriv d2; d2 = d1; Deriv d3(d2); d3 = d1; Base b1; b1 = d1; return 0; }