< previous page page_277 next page >

Page 277
LISTING 17.4 continued
d5ef64f4d3250b96ba5c07ca5bbc2f56.gif
24:   {
25:   public:
26:      Dog() { cout << Dog constructor\n; }
27:      virtual ~Dog() { cout << Dog destructor\n; }
28:      Dog (const Dog & rhs);
29:      void Speak()const { cout << Woof!\n; }
30:      virtual Mammal* Clone() { return new Dog(*this); }
31:   };
32:
33:   Dog::Dog(const Dog & rhs):
34:   Mammal(rhs)
35:   {
36:      cout << Dog copy constructor\n;
37:   }
38:
39:   class Cat : public Mammal
40:   {
41:   public:
42:      Cat() { cout << Cat constructor\n; }
43:      virtual ~Cat() { cout << Cat destructor\n; }
44:      Cat (const Cat &);
45:      void Speak()const { cout << Meow!\n; }
46:      virtual Mammal* Clone() { return new Cat(*this); }
47:   };
48:
49:   Cat::Cat(const Cat & rhs):
50:   Mammal(rhs)
51:   {
52:      cout << Cat copy constructor\n;
53:   }
54:
55:   enum ANIMALS { MAMMAL, DOG, CAT};
56:   const int NumAnimalTypes = 3;
57:   int main()
58:   {
59:      Mammal *theArray[NumAnimalTypes];
60:      Mammal* ptr;
61:      int choice,i;
62:      for (i = 0; i<NumAnimalTypes; i++)
63:      {
64:        cout << (1)dog (2)cat (3)Mammal: ;
65:        cin >> choice;
66:        switch (choice)
67:        {
68:            case DOG: ptr = new Dog;
69:            break;
70:            case CAT: ptr = new Cat;
71:            break;
72:            default: ptr = new Mammal;
d5ef64f4d3250b96ba5c07ca5bbc2f56.gif
continues

 
< previous page page_277 next page >

If you like this book, buy it!