gpt4 book ai didi

从组合中的另一个类重写 C++ 方法

转载 作者:行者123 更新时间:2023-11-30 00:53:51 25 4
gpt4 key购买 nike

如何覆盖另一个类的方法?情况如下:

class foot:
{
void kick() { clumsyKick(); };
}

class person: /* Person has Foot */
{
foot *personsFoot;
}

class soccerPlayer: /* SoccerPlayer has Foot too, but his foot is better */
{
foot *soccerPlayerFoot;
}

现在我只想使用以下方法覆盖 soccerPlayer 类的 foot 类 Kick() 方法(我知道下面的语法不正确):

soccerPlayer::foot::Kick() { expertKick(); }

在 C++ 中可以吗? 这种情况的最佳解决方法是什么?

ps:我负担不起为 foot::Kick() 的每个实现创建一个派生类;

最佳答案

直接的答案是您不能重写组合类的方法。只有继承才有可能覆盖。

在这种情况下,您可以使用其他设计模式,例如委托(delegate)。 C++ 本身不提供委托(delegate),但您可以模拟它们或使用提供实现的框架。您可以让 foot 类采用委托(delegate)来实现 kick,并在 soccerPlayer 类中提供替代委托(delegate)。

您可以使用函数指针或使用单个方法抽象类来模拟委托(delegate)。例如你可以创建

class IKick{
public:
virtual void kick() = 0;
}

然后您可以通过扩展person 的类提供IKick 的专门实现。

当然,为了使 kick 方法执行任何有用的操作,您可能希望更改签名以包含一些参数,这些参数将状态传递给调用者并形成调用者。

关于从组合中的另一个类重写 C++ 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15363318/

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