. 定义基类 Animal, 包含保护数据成员 name 和纯虛两数calkO。定义猫类 cat,继承 Animal 类,实现 talk 方法,输出为:coutsname~< “MiaoMiao” Ecendl!;定 义狗类 Dog;继东 Animal 类,实现talk()方法,输出为: cout<<name<< "WangWang" <<endl. 输入描述:有键盛输入动物个数和每种动物的信息,包括动物关型 (其中C 表示猫类,口 表示正方形类)及其 相应名称。 猫的输入格式为:C名字 狗的输入格式为:D名字 输出描述:通过 Animal 类的对象指针调用虚两数 talk0,依次输出每种动物的叫的动作。 猫的信息输出格式为: Cat 的名字 叫的功作 狗的信息输出格式为: Dog 的名字川的効作
时间: 2024-03-26 08:34:45 浏览: 54
好的,这是一个关于动物类和多态的编程问题,以下是一个可能的解决方案:
```c++
#include <iostream>
#include <vector>
#include <string>
using namespace std;
class Animal {
protected:
string name;
public:
Animal(string n) : name(n) {}
virtual void talk() = 0; // 纯虚函数
};
class Cat : public Animal {
public:
Cat(string n) : Animal(n) {}
void talk() {
cout << "Cat's name is " << name << ", and it says MiaoMiao." << endl;
}
};
class Dog : public Animal {
public:
Dog(string n) : Animal(n) {}
void talk() {
cout << "Dog's name is " << name << ", and it says WangWang." << endl;
}
};
int main() {
int n;
cin >> n;
vector<Animal*> animals(n); // 动态数组,存储动物对象的指针
for (int i = 0; i < n; i++) {
char type;
string name;
cin >> type >> name;
if (type == 'C') {
animals[i] = new Cat(name);
} else if (type == 'D') {
animals[i] = new Dog(name);
}
}
for (int i = 0; i < n; i++) {
animals[i]->talk(); // 多态调用 talk 方法
delete animals[i]; // 释放内存
}
return 0;
}
```
程序首先输入动物个数 n,然后循环 n 次,每次输入一个动物的类型和名称。根据类型创建一个猫对象或狗对象,并将其指针存储到动态数组中。最后循环动态数组,调用每个动物对象的 talk 方法,输出其名称和叫的声音。注意,动态数组中存储的是基类指针,而调用的是虚函数,这就实现了多态。程序结束时,需要释放动态数组中每个指针所指向的内存,以避免内存泄漏。
阅读全文