#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"); 
   } 


   // Below is a better way to initialize m_obj. 
   // 
   CMainClass(const CMainClass& rhs) :m_obj(rhs.m_obj)   
   { 
     printf(" CMainClass: copy-ctor\n");
   } 


   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; 
} 
