假设有一个基类Animal和两个派生类Dog和Cat。请定义一个类Zoo,该类包含一个由Animal指针构成的数组,能够存储多个Animal及其派生类的对象。请定义Zoo类的构造函数、析构函数和addAnimal()函数,能够向数组中添加Animal及其派生类的对象,并定义一个printAnimals()函数,能够打印数组中所有Animal及其派生类的信息
时间: 2024-02-11 08:06:29 浏览: 87
好的,这是一个比较典型的多态的应场景。下面是代码实现:
```
#include <iostream>
using namespace std;
class Animal {
public:
virtual void showInfo() = 0; // 纯虚函数};
class Dog : public Animal {
public:
virtual void showInfo() {
cout << "I am a dog." << endl;
}
};
class Cat : public Animal {
public:
virtual void showInfo() {
cout << "I am a cat." << endl;
}
};
class Zoo {
private:
Animal **animals;
int size;
public:
Zoo(int size) {
this->size = size;
animals = new Animal*[size];
for (int i = 0; i < size; i++) {
animals[i] = NULL;
}
}
~Zoo() {
for (int i = 0; i < size; i++) {
if (animals[i] != NULL) {
delete animals[i];
}
}
delete[] animals;
}
void addAnimal(Animal *animal) {
for (int i = 0; i < size; i++) {
if (animals[i] == NULL) {
animals[i] = animal;
break;
}
}
}
void printAnimals() {
for (int i = 0; i < size; i++) {
if (animals[i] != NULL) {
animals[i]->showInfo();
}
}
}
};
int main() {
Zoo zoo(10);
Dog *dog1 = new Dog();
Cat *cat1 = new Cat();
Dog *dog2 = new Dog();
zoo.addAnimal(dog1);
zoo.addAnimal(cat1);
zoo.addAnimal(dog2);
zoo.printAnimals();
delete dog1;
delete cat1;
delete dog2;
return 0;
}
```
在这里,我们定义了一个Animal的抽象基类,以及两个派生类Dog和Cat。这三个类都实现了showInfo()纯虚函数。Zoo类含有一个Animal指针数组,能够存储多个Animal及其派生类的对象。在构造函数中,我们初始化了这个指针数组,将其全部赋值为NULL。addAnimal()函数能够向数组中添加Animal及其派生类的对象。printAnimals()函数能够打印数组中所有Animal及其派生类的信息。在main函数中,我们创建了三个动物对象,add到了Zoo中,并且打印了所有动物信息。最后,记得释放内存。
阅读全文