#include <iostream>
#include <cstring>
using namespace std;
class Animal {
public:
// Animal(int s=0, int c=0) {speed = s;color = c;}
virtual void eat()=0;//纯虚函数,抽象类,不能实例化,可以定义指针;
virtual void run(){cout<<"animal run."<<endl;}
virtual void sound(){}
virtual ~Animal(){cout<<"Del Animal"<<endl;}//
protected:
int speed, color;
};
class Cat: public Animal {
public:
Cat(): Animal() { cout << "Cats." << endl; }
void eat() {cout << "Cats eat fish." << endl; }
void run() {cout << "Cats run quietly." << endl; }
void sound() {cout << "Cats's voice is miaomiao." << endl;}
~Cat(){cout<<"Del cat."<<endl;}
};
class Dog: public Animal {
public:
Dog(): Animal() { cout << "Dogs." << endl; }
void eat() {cout << "Dogs eat bone." << endl;}
void run() {cout << "Dogs run quickly." << endl;}
void sound() {cout << "Dog's voice is wangwang." << endl;}
~Dog(){cout<<"Del dog"<<endl;}
};
class Bird: public Animal {
public:
Bird(): Animal() { cout << "Birds." << endl; }
void eat() { cout << "Birds eat pest." << endl; }
void run() { cout << "Birds run highly." << endl;}
void sound() {cout << "Bird's voice is zhazha." << endl; }
~Bird(){cout<<"Del bird"<<endl;}
};
class Zoo {
public:
Zoo(int _nCats, int _nDogs, int _nBirds){
int i;
nCats = _nCats; nDogs=_nDogs; nBirds = _nBirds;
total=_nCats+_nDogs+_nBirds;
animals=new Animal*[total];
for(i=0;i<nDogs;i++)
animals[i]=new Dog();
for(;i<nCats+nDogs;i++)
animals[i]=new Cat();
for(;i<nCats+nDogs+nBirds;i++)
animals[i]=new Bird();
}
~Zoo(){
int i;
for(i=0;i<total;i++)
delete animals[i];
delete[] animals;
}
void letsRun(){
int i;
for (i=0;i<total;i++)
{
animals[i]->run();
}
}
private:
Animal **animals;
int nCats, nDogs, nBirds,total;
};
int main() {
Zoo zoo(3,5,6);
zoo.letsRun();
return 0;
}
多态二(纯虚函数,抽象类,不能实例化,可以定义指针;)
最新推荐文章于 2023-12-19 00:24:49 发布