【发布时间】:2016-02-20 16:38:39
【问题描述】:
我有一个我无法处理的小问题。 目前我正在研究一个关于动物之间马拉松的项目。 我不得不使用多态性,即使没有它可能会更容易。 这是我的代码示例:
class Animal
{
public:
virtual void run()=0;
virtual bool return_if_finished()=0;
virtual float return_distance()=0;
}
class Turtle :public Animal
{
int id;
float distance; //etc.
public:
void run();
bool return_if_finished();
float return_distance();
void set_id(int i);
void a_friend();
}
class Snail :public Animal
{
float distance; //etc.
public:
void run();
bool return_if_finished();
float return_distance();
void broken_leg();
}
所以这是一个示例。从主类“Animal”继承的所有类只有三个相互方法。他们也有一些只有他们才需要的东西。
如果我想以这样的“运行”方法编写代码:
...
Animal* turtles = new Turtle[amount];
Animal* snails = new Snail[amount];
for(int i=0; i<amount; i++)
turtles[i].set_id(i);
我无法编译它,因为“类 Animal 没有名为“set_id”的成员”。 我可以为每个类创建所有这些方法,但这完全没有意义。我敢打赌,有一个快速的解决方案。 如果我为类“Animal”创建一个虚拟 void “set_id(int)”,那么我会收到错误消息,即并非所有从动物继承的类都包含该方法。 因此,任何帮助将不胜感激。谢谢
【问题讨论】:
-
您需要有一个 Animal 指针,并取消引用它以实现多态行为。此外,您需要在使用之前实际构建这些。
-
如果你想利用多态性,你应该使用指向
Animal的指针,否则C++编译器会将所有方法调用链接到来自Animal的方法调用
标签: c++ class methods polymorphism