如果我遗漏了一些明显的东西,请原谅我-我目前是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;
}
如何将子类输入到基类中,然后调用子类函数?我不确定这是否可能但值得一试:)
提前谢谢!
答案 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