#include <iostream>
using namespace std;
enum COLOR { Red, Green, Blue, Yellow, White, Black, Brown };
class Animal
{
public:
Animal(int);
virtual ~Animal() { cout << "Animal析构函数被调用...\n"; }
virtual int GetAge() { return itsAge; }
virtual void SetAge(int age) { itsAge = age; }
private:
int itsAge;
};
Animal::Animal(int age) : itsAge(age)
{
cout << "Animal的构造函数被调用...\n";
}
class Horse : public virtual Animal
{
public:
Horse(COLOR itsColor ,int height, int age);
virtual ~Horse() { cout << "Horse析构函数被调用...\n"; }
virtual void Whinny() const { cout << "whinny..."; }
virtual int GetHeight() const { return itsHeight; }
virtual COLOR GetColor() const { return itsColor; }
private:
int itsHeight;
COLOR itsColor;
};
Horse::Horse(COLOR color,int height, int age) :Animal(age), itsHeight(height), itsColor(color)
{
cout << "Horse构造函数被调用....\n" <<endl;
}
class Bird : public virtual Animal
{
public:
Bird(COLOR color, bool migrates, int age);
virtual ~Bird() { cout << "Bird析构函数被调用...\n" ;};
virtual void Chirp() const { cout << "Chirp...."; }
virtual void Fly() const {
cout << "I can fly! I can fly! I can fly!";
}
virtual bool GetMigration() const { return itsMigration; }
virtual COLOR GetColor() const { return itsColor; }
private:
bool itsMigration;
COLOR itsColor;
};
Bird::Bird(COLOR color, bool migrates, int age) :Animal(age), itsMigration(migrates), itsColor(color)
{
cout << "Bird构造函数被调用...\n";
}
class Pegasus : public Horse, public Bird
{
public:
void Chirp() const { Whinny(); }
Pegasus(COLOR, int, bool, long, int);
~Pegasus() { cout << "Pegasus析构函数被调用...\n"; }
virtual long GetNumberBelievers() const
{
return itsNumberBelivers;
}
private:
long itsNumberBelivers;
};
Pegasus::Pegasus(COLOR aColor, int height, bool migrates, long numBelieve, int age): Horse(aColor, height, age), Bird(aColor, migrates, age), itsNumberBelivers(numBelieve),Animal(age)
{
cout << "Pegasus构造函数被调用...\n";
};
int main()
{
Pegasus *pPeg = new Pegasus(Blue, 5, true, 10, 2);
pPeg->Fly();
pPeg->Whinny();
pPeg->Chirp();
cout << "有" << pPeg->GetNumberBelievers() << "人相信世界上有飞马" << endl;
COLOR color = pPeg->Bird::GetColor();
cout << "飞马的颜色:" << color << endl;
pPeg->GetAge();
delete pPeg;
return 0;
}