基于前面的在线编程作业改写
Dog类和Cat类继承Animal类
根据用户输入的数值,创建相应个数的 Dog 对象和 Cat对象,然后调用 speak() 之后再销毁。(10分)
题目内容:
- 编写三个类
Dog类和Cat类继承Animal类;
Dog类、Cat类、Animal类各有一个默认构造函数,分别输出字符串“Dog”、“Cat”和“Animal”。输出字符串后换行。注意三个字符串的首字母都是大写。
在 Animal 类中定义纯虚函数 speak();
在 Dog 和 Cat类中覆写基类的 speak() 函数。Dog类的speak函数输出字符串“wang”之后换行;Cat类的speak函数输出字符串“miao”之后换行。注意字符串“wang”和“miao”都是小写字母
上述三个类中如果有任何其它函数,则这些函数不直接或者间接输出任何信息
- 编写主函数
在主函数中接受用户输入的一个整数N(大于0);
创建一个vector对象v (你可以用其它名字),存储Animal对象的指针。
按照先创建一个 Dog 对象,紧接着再创建一个 Cat 对象这样交替创建的次序,一共创建 N 个 Dog对象和N个 Cat 对象;将这些Dog对象和Cat对象的指针按照创建的次序都存入v中。(提示:可以使用vector::push_back()函数)。
将存入v中的对象,按照先后次序,逐个调用 speak() 函数,然后用 delete 显式销毁。(注意:每调用一个对象的 speak() 之后,就立即用 delete 销毁该对象)。
程序中除了接受用户输入的整数之外,没有任何其它输入语句;
程序中除了构造函数和speak()的输出之外,没有任何其它输出。
输入格式:
一个大于零的整数
输出格式:
输出多行信息,最后一行是空行
没有任何其它提示信息
输入样例:
2
输出样例:
Animal
Dog
Animal
Cat
Animal
Dog
Animal
Cat
wang
miao
wang
miao
注意:输出结果的最后一行是空行
时间限制:500ms内存限制:32000kb
#include <iostream>
#include <vector>
class Animal
{
public:
Animal()
{
std::cout << "Animal" << std::endl;
}
virtual void speak() = 0;
};
class Dog : public Animal
{
public:
Dog()
{
std::cout << "Dog" << std::endl;
}
void speak() override
{
std::cout << "wang" << std::endl;
}
};
class Cat : public Animal
{
public:
Cat()
{
std::cout << "Cat" << std::endl;
}
void speak() override
{
std::cout << "miao" << std::endl;
}
};
int main()
{
std::vector <Animal*> v;
std::vector<Animal*>::iterator it;
int N;
std::cin >> N;
for (int i{0}; i < N; i++)
{
Dog *dog = new Dog;
Cat *cat = new Cat;
v.push_back(dog);
v.push_back(cat);
}
for(it = v.begin(); it != v.end(); it++)
{
(*it) -> speak();
delete *it;
}
return 0;
}