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

  1. //Critter Farm
  2. //Demonstrates object containment
  3.  
  4. #include <iostream>
  5. #include <string>
  6. #include <vector>
  7.  
  8. using namespace std;
  9.  
  10. class Critter
  11. {
  12. public:
  13.     Critter(const string& name = "");
  14.     string GetName() const;  
  15.     
  16. private:
  17.     string m_Name;
  18. };
  19.  
  20. Critter::Critter(const string& name):
  21.     m_Name(name)
  22. {}
  23.  
  24. inline string Critter::GetName() const 
  25. {
  26.     return m_Name;
  27. }
  28.  
  29. class Farm
  30. {
  31. public:
  32.     Farm(int spaces = 1); 
  33.     void Add(const Critter& aCritter);
  34.     void RollCall() const;
  35.     
  36. private:
  37.     vector<Critter> m_Critters;
  38. };
  39.  
  40. Farm::Farm(int spaces)
  41. {
  42.     m_Critters.reserve(spaces);
  43. }
  44.  
  45. void Farm::Add(const Critter& aCritter)
  46. {
  47.     m_Critters.push_back(aCritter);
  48. }
  49.  
  50. void Farm::RollCall() const
  51. {
  52.     for (vector<Critter>::const_iterator iter = m_Critters.begin(); 
  53.          iter != m_Critters.end(); 
  54.          ++iter)
  55.         cout << iter->GetName() << " here.\n";
  56. }
  57.  
  58. int main()
  59. {
  60.     Critter crit("Poochie");
  61.     cout << "My critter's name is " << crit.GetName() << endl; 
  62.  
  63.     cout << "\nCreating critter farm.\n";
  64.     Farm myFarm(3);
  65.     
  66.     cout << "\nAdding three critters to the farm.\n";
  67.     myFarm.Add(Critter("Moe"));
  68.     myFarm.Add(Critter("Larry"));
  69.     myFarm.Add(Critter("Curly"));
  70.  
  71.     cout << "\nCalling Roll...\n";
  72.     myFarm.RollCall();
  73.        
  74.     return 0;
  75. }
  76.