#include <stdio.h> 

////////////////// 
// Class used as member of main class. 
// 
class CMember { 
public: 
   CMember() 
   { 
      printf(" CMember: default ctor\n"); 
   } 

   CMember(const CMember&) 
   { 
      printf(" CMember: copy-ctor\n"); 
   } 

   CMember& operator=(const CMember&) { 
      printf(" CMember: operator=\n"); 
      return *this; 
   } 
}; 

////////////////// 
// Main class 
// 
class CMainClass { 
protected: 
   CMember m_obj; 

public: 
   CMainClass() 
   { 
      printf(" CMainClass: default ctor\n"); 
   } 


   // Copy-ctor calls operator=. This is not generally recommended. 
   // 
   CMainClass(const CMainClass& rhs) 
   { 
      printf(" CMainClass: copy-ctor\n"); 
      *this = rhs; 
   } 
 

   CMainClass& operator=(const CMainClass& rhs) 
   { 
      printf(" CMainClass: operator=\n"); 
      m_obj = rhs.m_obj; 
      return *this; 
   } 
}; 

int main() 
{ 
   printf("Creating instance with default ctor:\n"); 
   CMainClass obj1; 

   printf("Creating instance with copy-ctor:\n"); 
   CMainClass obj2(obj1); 

   printf("Performing assignment:\n"); 
   obj2 = obj1; 
} 
