#include<iostream>
using namespace std;

//////// class Employee ///////
class Employee
{
  private:
    char *myName_p;    
  public:
    Employee(char *name){
      cout<<"Employee::ctor\n";
      myName_p = new char(sizeof(strlen(name)));
      myName_p = name;
    }
    
    char* disp(){
          return(myName_p);
    }
    ~Employee(){
      cout<<"Employee:dtor\n";
      delete (myName_p);
    }
};
//////// class Company ///////
class Company
{
  private:
    char *name;
    Employee *myEmp_p;    
  public:
    Company(char * compName, Employee* emp){
      cout<<"Company::ctor\n";
      name = new char(sizeof(strlen(compName))); 
      name = compName;
      myEmp_p = emp;
    };

    ~Company()
    {
      cout<<"Company:dtor\n\n";
      delete (name);
      myEmp_p = NULL;
    };
};

main()
{
  cout<<"\nExample of Aggregation Relationship \n";
  cout<<"-----------------------------------------\n\n"; 
  {
    cout<<"Here, an Employee-David works for Company-MS \n";
    Employee emp("David");
  
    {
      Company comp("MS", &emp);
    } // here Company object will be deleted, whereas Employee object is still there

    cout<<"At this point Company gets deleted...\n";
    cout<<"\nBut Employee-"<<emp.disp();
    cout<<" is still there\n";
    
  } //here Employee object will be deleted
  system("pause");
}
