_DESIGNING C++ CLASSES_ by Steven Sinofsky [EXAMPLE 1] class CBase { public: CBase(); // user-supplied constructor ~CBase(); // user-supplied destructor // other functions and variables }; class CMyClass : public CBase { public: CMyClass(); // user-supplied constructor ~CMyClass(); // user-supplied destructor // other functions and variables }; void main() { CBase* pBase = new CMyClass; delete pBase; // wrong destructor invoked because ~CBase() is not virtual } [EXAMPLE 2] /* 1 */ extern CMyClass m0; /* 2 */ CMyClass m1; // invokes default constructor /* 3 */ m1 = m0; // invokes assignment operator /* 4 */ CMyClass mInit = m0; // invokes copy constructor [EXAMPLE 3] class CAnyClass : public CObject { CAnyClass(); virtual ~CAnyClass(); CAnyClass(const CAnyClass& src); CAnyClass& operator=(const CAnyClass& src); };