#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:virtual public Animal
{
public:
Horse(COLOR color,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) :itsColor(color),itsHeight(height),Animal(age)
{
cout << "Horse的构造函数被调用...\n";
}
class Bird:virtual public 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\n";
}
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) :itsColor(color),itsMigration(migrates),Animal(age)
{
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 itsNumberBelievers;
}
private:
long itsNumberBelievers;
};
Pegasus::Pegasus(COLOR aColor,int height, bool migrates, long numBelive,int age) :
Horse(aColor,height,age),
Bird(aColor,migrates,age),
itsNumberBelievers(numBelive),
Animal(age)
{
cout << "Pegasus的构造函数被调用...\n";
}
int main()
{
Pegasus* pPeg = new Pegasus(Red,5, true, 10,2);
pPeg->Fly();
pPeg->Whinny();
pPeg->Chirp();
cout << "有" << pPeg->GetNumberBelievers() << "人相信世界上有飞马\n";
COLOR color=pPeg->Horse::GetColor();
cout << "飞马的颜色:" << color << endl;
int age=pPeg->GetAge();
cout << "飞马的年龄:" << age << endl;
delete pPeg;
return 0;
}
C++-多继承与虚基类
于 2022-04-10 10:54:27 首次发布