如何在将自身子类作为参数的基类中创建函数?

时间:2019-03-16 16:35:12

标签: c++

如果我遗漏了一些明显的东西,请原谅我-我目前是C ++的新手,并且仍在学习它,在此先感谢。

所以我有两个函数,例如基类ANIMAL,子类SHEEP和子类COW。

#include <iostream>

class Animal
{
public:
    void Noise(/*Subclass input here*/)
    {
        // Somehow call said subclass Noise() function
    }
};

class Sheep : public Animal
{
    void Noise()
    {
        std::cout << "Baa" << std::endl;
    }
};

class Cow : public Animal
{
    void Noise()
    {
        std::cout << "Moo" << std::endl;
    }
};

int main()
{
    Animal* animal = new Animal();
    Sheep* sheep = new Sheep();
    Cow* cow = new Cow();

    animal->Noise(/*Subclass input here, for example: sheep*/);

    return 0;
}

如何将子类输入到基类中,然后调用子类函数?我不确定这是否可能但值得一试:)

提前谢谢!

1 个答案:

答案 0 :(得分:3)

使用virtual利用多态性,避免将具体对象作为参数传递给基类。

#include <iostream>

class Animal
{
    public:
        virtual void Noise() = 0;
};

class Sheep : public Animal
{
    public:
        void Noise() override
        {
            std::cout << "Baa" << std::endl;
        }
};

class Cow : public Animal
{
    public:
        void Noise() override
        {
            std::cout << "Moo" << std::endl;
        }
};

int main()
{
    Animal* animal = new Sheep();

    animal->Noise();

    delete animal;

    animal = new Cow();

    animal->Noise();

    delete animal;
}

结果是:

Baa
Moo

示例:newlines

根据下面的评论,这是一个使用CRTP实现上述代码的快速示例:https://rextester.com/TQK18582