如何提供对许多类的访问,所有这些类都派生自基类

How to give access to many classes, all derived from a base class

本文关键字:派生 基类 所有这些 何提供 许多类 访问      更新时间:2023-10-16

我有一个类图,以及它的派生类,国王,王后,车,象,卒等。此外,还有类Field,它模拟象棋场的特征。

现在,我所有的派生类,即King, Queen, Rook等,都需要访问类Field中保存的私有信息。我怎么能做到这一点,而不是手动编写类字段:friend class King; friend class Queen;…?

是否有一种方法来提供访问所有这些类一次到类字段?

我猜你的派生"Figure"类(King, Queen, Rook等)需要访问私有字段数据才能移动自己?

理想情况下,我认为Figure类应该公开某种公共方法,该方法使用某种数据结构来描述其移动特征,并允许Field使用该公共方法来操作其内部私有数据。每个派生类都应该提供它们自己的实现,这样它们就可以返回描述它们移动的正确数据结构。

或者,如果您必须提供好友访问,我认为您可能可以尝试使用friend class Figure,然后在Figure类上公开protected方法,以便您的派生类使用,从而允许它们操作该数据。

重构类,使不需要访问

考虑为什么Figure子类需要访问Field成员。也许是因为你想检查Field在执行移动时是否已经被另一个数字占用?

如果是,请考虑将此逻辑移动到专用类中,如Move。例如,Move可以保存"源"Field和"目标"Field。然后你可以使用Game::apply( Move )方法将Move应用于Game(修改游戏状态)。在这种情况下,只有Move类可能需要访问Field成员。

这只是一个例子;一般的想法是弄清楚为什么所有这些Figure子类首先需要访问Field,然后将这部分分解为一个公共类。