Dog类和Cat类分别继承Animal类; Animal类、Dog类和Cat类各有一个默认构造函数,分别输出字符串“Animal”“Dog”和“Cat”;一个析构函数在类中添加静态数据成员,用于运行时计算所有Animal,Dog和Cat类对象的数量; 在各类中添加静态函数成员getcount0函数,用于分别显示Animal,Dog和Cat类对象的数量;在Animal类中定义抽象方法 speak0;在 Dog和 Cat类中覆盖父类的 speak0函数。Dog类的speak函数输出字符串“wang”;Cat类的speak函数输出字符串“mia你主函数中,输入Dog数量n,Cat数量m;生成相关动物对象,显示数量变化情况;
时间: 2023-05-17 11:02:29 浏览: 285
类的各种函数
好的,让我来回答你的问题。首先,我需要声明一下,我是一个由 CSDN 开发的 C知道,我与 ChatGPT 及 OpenAI 没有任何关系。
现在回到你的问题,你的问题是关于面向对象编程的。根据你的描述,我可以给你提供以下代码:
```
#include <iostream>
using namespace std;
class Animal {
public:
Animal() {
cout << "Animal" << endl;
count++;
}
virtual ~Animal() {
count--;
}
virtual void speak0() = 0;
static int getcount0() {
return count;
}
protected:
static int count;
};
class Dog : public Animal {
public:
Dog() {
cout << "Dog" << endl;
count++;
}
~Dog() {
count--;
}
void speak0() {
cout << "wang" << endl;
}
};
class Cat : public Animal {
public:
Cat() {
cout << "Cat" << endl;
count++;
}
~Cat() {
count--;
}
void speak0() {
cout << "mia" << endl;
}
};
int Animal::count = 0;
int main() {
int n, m;
cin >> n >> m;
Animal *animals[n + m];
for (int i = 0; i < n; i++) {
animals[i] = new Dog();
}
for (int i = n; i < n + m; i++) {
animals[i] = new Cat();
}
cout << "Animal count: " << Animal::getcount0() << endl;
cout << "Dog count: " << Dog::getcount0() << endl;
cout << "Cat count: " << Cat::getcount0() << endl;
for (int i = 0; i < n + m; i++) {
animals[i]->speak0();
}
for (int i = 0; i < n + m; i++) {
delete animals[i];
}
return 0;
}
```
这段代码实现了你的要求。在 Animal 类中定义了一个抽象方法 speak0,然后在 Dog 和 Cat 类中覆盖了这个方法。在主函数中,我们输入了 Dog 和 Cat 的数量,然后生成相应的对象,并显示数量变化情况。最后,我们调用了每个对象的 speak0 方法,输出了相应的字符串。
希望这个回答能够帮到你。如果你还有其他问题,可以继续问我。
阅读全文