c++程序设计 多态和纯虚函数

基于前面的在线编程作业改写

Dog类和Cat类继承Animal类

根据用户输入的数值,创建相应个数的 Dog 对象和 Cat对象,然后调用 speak() 之后再销毁。(10分)
题目内容:

  1. 编写三个类

Dog类和Cat类继承Animal类;

Dog类、Cat类、Animal类各有一个默认构造函数,分别输出字符串“Dog”、“Cat”和“Animal”。输出字符串后换行。注意三个字符串的首字母都是大写。

在 Animal 类中定义纯虚函数 speak();

在 Dog 和 Cat类中覆写基类的 speak() 函数。Dog类的speak函数输出字符串“wang”之后换行;Cat类的speak函数输出字符串“miao”之后换行。注意字符串“wang”和“miao”都是小写字母

上述三个类中如果有任何其它函数,则这些函数不直接或者间接输出任何信息

  1. 编写主函数

在主函数中接受用户输入的一个整数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;
}

发布了39 篇原创文章 · 获赞 4 · 访问量 5769

猜你喜欢

转载自blog.csdn.net/weixin_45725137/article/details/104343856