gpt4 book ai didi

C++ 多态性。方法

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:48:25 26 4
gpt4 key购买 nike

我有一个我无法处理的小问题。目前我正在研究一个关于动物之间马拉松的项目。我不得不使用多态性,即使没有它可能更容易。这是我的代码示例:

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 的类都包含该方法。因此,我们将不胜感激任何帮助。谢谢

最佳答案

If I create a virtual void "set_id(int)" for the class "Animal" then I get the error message that not all classes that inherit from animal contain that method.

我怀疑您将 Animal::set_id 定义为虚拟,如下所示:

virtual void set_id(int) = 0;

您真正想要的是在 Animal 类中将其定义为虚方法,如下所示:

virtual void set_id(int _id) {id = _id};

此外,id 成员变量需要移动到 Animal 类而不是 Turtle

编辑:

扩展答案以包含完整代码:

class Animal
{
public:
Animal() : id(-1) {}
virtual ~Animal() {}

virtual void run() = 0;
virtual bool return_if_finished() = 0;
virtual float return_distance() = 0;

void set_id(int i) { id = i; }

private:
int id;
};

class Turtle :public Animal
{
public:
void run() {};
bool return_if_finished() { return true; };
float return_distance() { return 2.0; };
void a_friend() {};
};

class Snail :public Animal
{
public:
void run() {};
bool return_if_finished() { return false; };
float return_distance() { return 1.0; };
void broken_leg() {};
};


int main()
{
const int amount = 10;
Turtle turtles[amount];
Snail snails[amount];
for (int i = 0; i < amount; i++) {
turtles[i].set_id(i);
}
}

关于C++ 多态性。方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33788610/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com