c ++ abstract data types 18.5

#include <iostream>

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

class Animal // common base to both horse and bird
{
public:
    Animal(int,COLOR);
    virtual ~Animal() { std::cout << "Animal destructor ...\n"; }
    virtual int getAge() const { return age; }
    virtual void setAge(int newAge) { age = newAge; }
    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;

     COLOR getcolor() const
        { return color; }
private:
    int age;
    COLOR color;
};

Animal::Animal(int newAge,COLOR newColor):
age(newAge),color(newColor)
{
    std::cout << "Animal constructor ...\n";
}

class Mammal : public Animal
{
public:
    Mammal(int newAge,COLOR newColor):Animal(newAge,newColor)
        { 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 newAge,COLOR newColor):Animal(newAge,newColor)
        { 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 { }

//protected:
   // COLOR color;
};

class Horse : public Mammal
{
public:
    Horse(int newAge, COLOR newColor):Mammal(newAge,newColor)
        { std::cout << "Horse constructor ...\n"; }
    virtual ~Horse()
        { std::cout << "Horse destructor ...\n"; }
    virtual void speak() const
        { std::cout << "Whinny!\n"; }
    //virtual COLOR getcolor() const
       // { return color; }
    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 color;
};

class Dog : public Mammal
{
public:
    Dog(int newAge, COLOR newColor ):
        Mammal(newAge,newColor)
        { 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 color;
};

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,Red);
            break;
        default:
            fQuit = true;
            break;
        }
        if (fQuit)
            break;


        std::cout<<"age: "<<pAnimal->getAge()<<std::endl;
        std::cout<<"color: "<<COLOR(pAnimal->getcolor())<<std::endl; //???ru he qiangzhi zhuanhuan 
        pAnimal->speak();
        pAnimal->eat();
        pAnimal->reproduce();
        pAnimal->move();
        pAnimal->sleep();
        delete pAnimal;
        std::cout << "\n";
    }
    return 0;
}

For enumerated types of display can only be displayed as int type, how it will be displayed as RED, BLUE, such as the value of it?

Guess you like

Origin blog.csdn.net/suyunzzz/article/details/90055976