home *** CD-ROM | disk | FTP | other *** search
/ Beginning C++ Through Gam…rogramming (2nd Edition) / BCGP2E.ISO / source / chapter09 / heap_data_member.cpp < prev    next >
Encoding:
C/C++ Source or Header  |  2006-10-30  |  2.2 KB  |  106 lines

  1. //Heap Data Member
  2. //Demonstrates an object with a dynamically allocated data member
  3.  
  4. #include <iostream>
  5. #include <string>
  6.  
  7. using namespace std;
  8.  
  9. class Critter
  10. {
  11. public: 
  12.     Critter(const string& name = "", int age = 0);  
  13.     ~Critter();                   //destructor prototype   
  14.     Critter(const Critter& c);    //copy constructor prototype
  15.     Critter& Critter::operator=(const Critter& c);  //overloaded assignment op
  16.     void Greet() const; 
  17.  
  18. private:
  19.     string* m_pName;
  20.     int m_Age;
  21. };
  22.  
  23. Critter::Critter(const string& name, int age)
  24. {
  25.     cout << "Constructor called\n";
  26.     m_pName = new string(name);
  27.     m_Age = age;  
  28. }
  29.  
  30. Critter::~Critter()                        //destructor definition
  31. {
  32.     cout << "Destructor called\n";
  33.     delete m_pName;
  34. }
  35.  
  36. Critter::Critter(const Critter& c)        //copy constructor definition
  37. {
  38.     cout << "Copy Constructor called\n";
  39.     m_pName = new string(*(c.m_pName));
  40.     m_Age = c.m_Age;
  41. }
  42.  
  43. Critter& Critter::operator=(const Critter& c)  //overloaded assignment op def
  44. {
  45.     cout << "Overloaded Assignment Operator called\n";
  46.     if (this != &c)
  47.     {
  48.         delete m_pName;
  49.         m_pName = new string(*(c.m_pName));
  50.         m_Age = c.m_Age;
  51.     }
  52.     return *this;
  53. }
  54.  
  55. void Critter::Greet() const
  56. {
  57.      cout << "I'm " << *m_pName << " and I'm " << m_Age << " years old. ";
  58.      cout << "&m_pName: " << cout << &m_pName << endl;
  59. }
  60.  
  61. void testDestructor();
  62. void testCopyConstructor(Critter aCopy);
  63. void testAssignmentOp();
  64.  
  65. int main()
  66. {
  67.     testDestructor();
  68.     cout << endl;
  69.     
  70.     Critter crit("Poochie", 5);
  71.     crit.Greet();
  72.     testCopyConstructor(crit);
  73.     crit.Greet();
  74.     cout << endl;
  75.     
  76.     testAssignmentOp();
  77.            
  78.     return 0;
  79. }
  80.  
  81. void testDestructor()
  82. {
  83.     Critter toDestroy("Rover", 3);
  84.     toDestroy.Greet();
  85. }
  86.  
  87. void testCopyConstructor(Critter aCopy)  
  88. {
  89.     aCopy.Greet();
  90. }
  91.  
  92. void testAssignmentOp()
  93. {
  94.     Critter crit1("crit1", 7);
  95.     Critter crit2("crit2", 9);
  96.     crit1 = crit2;
  97.     crit1.Greet();  
  98.     crit2.Greet();
  99.     cout << endl;
  100.         
  101.     Critter crit3("crit", 11);
  102.     crit3 = crit3;
  103.     crit3.Greet();
  104. }
  105.  
  106.