⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 hour18_1.cpp

📁 《24学时精通c++》的随书源码的下半部分。欢迎下载学习。
💻 CPP
字号:
 // Listing 18.7

 // Deriving ADTs from other ADTs

 #include <iostream>

 

 enum COLOR { Red, Green, Blue, Yellow, White, Black, Brown } ;

 

 class Animal        // common base to both horse and bird

 {

 public:

     Animal(int);

     virtual ~Animal() { std::cout << "Animal destructor...\n"; }

     virtual int GetAge() const { return itsAge; }

     virtual void SetAge(int age) { itsAge = age; }

     virtual void Sleep() const = 0;

     virtual void Eat() const = 0;

     virtual void Reproduce() const = 0;

     virtual void Move() const = 0;

     virtual void Speak() const = 0;

 private:

     int itsAge;

 };

 

 Animal::Animal(int age):

 itsAge(age)

 {

     std::cout << "Animal constructor...\n";

 }

 

 class Mammal : public Animal

 {

 public:

     Mammal(int age):Animal(age)

         { std::cout << "Mammal constructor...\n";}

     virtual ~Mammal() { std::cout << "Mammal destructor...\n";}

     virtual void Reproduce() const 

         { std::cout << "Mammal reproduction depicted...\n"; }

 };

 

 class Fish : public Animal

 {

 public:

     Fish(int age):Animal(age)

         { std::cout << "Fish constructor...\n";}

     virtual ~Fish() 

         { std::cout << "Fish destructor...\n";  }

     virtual void Sleep() const 

         { std::cout << "fish snoring...\n"; }

     virtual void Eat() const 

         { std::cout << "fish feeding...\n"; }

     virtual void Reproduce() const 

         { std::cout << "fish laying eggs...\n"; }

     virtual void Move() const 

         { std::cout << "fish swimming...\n";   }

     virtual void Speak() const { }

 };

 

 class Horse : public Mammal

 {

 public:

     Horse(int age, COLOR color ):

         Mammal(age), itsColor(color) 

         { std::cout << "Horse constructor...\n"; }

     virtual ~Horse() 

         { std::cout << "Horse destructor...\n"; }

     virtual void Speak()const 

         { std::cout << "Whinny!... \n"; }

     virtual COLOR GetItsColor() const 

         { return itsColor; }

     virtual void Sleep() const 

         { std::cout << "Horse snoring...\n"; }

     virtual void Eat() const 

         { std::cout << "Horse feeding...\n"; }

     virtual void Move() const 

         { std::cout << "Horse running...\n";}

 

 protected:

     COLOR itsColor;

 };

 

 class Dog : public Mammal

 {

 public:

     Dog(int age, COLOR color ):

         Mammal(age), itsColor(color) 

         { std::cout << "Dog constructor...\n"; }

     virtual ~Dog() 

         { std::cout << "Dog destructor...\n"; }

     virtual void Speak()const 

         { std::cout << "Whoof!... \n"; }

     virtual void Sleep() const 

         { std::cout << "Dog snoring...\n"; }

     virtual void Eat() const 

         { std::cout << "Dog eating...\n"; }

     virtual void Move() const  

         { std::cout << "Dog running...\n"; }

     virtual void Reproduce() const 

         { std::cout << "Dogs reproducing...\n"; }

 

 protected:

     COLOR itsColor;

 };

 

 int main()

 {

     Animal *pAnimal=0;

     int choice;

     bool fQuit = false;

 

     while (1)

     {

         std::cout << "(1)Dog (2)Horse (3)Fish (0)Quit: ";

         std::cin >> choice;

 

         switch (choice)

         {

         case 1: 

             pAnimal = new Dog(5,Brown);

             break;

         case 2: 

             pAnimal = new Horse(4,Black);

             break;

         case 3: 

             pAnimal = new Fish (5);

             break;

         default: 

             fQuit = true;

             break;

         }

         if (fQuit)

             break;

 

         pAnimal->Speak();

         pAnimal->Eat();

         pAnimal->Reproduce();

         pAnimal->Move();

         pAnimal->Sleep();

         delete pAnimal;

         std::cout << "\n";
     }

     pAnimal = new Animal (5);   // new animal
                                 // The line above will produce a compiler error 
                                 // because Animal is an abstract class and cannot
                                 // be directly instantiated! The compiler knows it
                                 // is abstract because a method contains "const = 0"
                                 // (Animal::Sleep for instance).
     std::cout << "new animal: \n";
     pAnimal->Speak();

     pAnimal->Eat();

     pAnimal->Reproduce();

     pAnimal->Move();

     pAnimal->Sleep();


     delete pAnimal;

     std::cout << "\n";
     


     return 0;

 }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -