如何提供对许多类的访问,所有这些类都派生自基类
How to give access to many classes, all derived from a base class
我有一个类图,以及它的派生类,国王,王后,车,象,卒等。此外,还有类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
,然后将这部分分解为一个公共类。
- 如何通过派生类函数更改基类中的向量
- 如何使用基类指针引用派生类成员
- 使用基类指针创建对象时,缺少派生类析构函数
- 如何引用基类的派生类?
- 如果基类包含双指针成员,则派生类的构造函数
- 为什么此派生对象无法访问基类的后递减方法?
- 使用基类中的派生方法运行线程,而无需使用模板
- 是否可以使用基类非虚拟方法中的派生类虚拟方法?
- C++重载函数,一个采用基类的参数,另一个采用派生类的参数
- 在派生类中使用基类的私有成员变量的最佳方法
- 基类和派生类的多态赋值运算符
- 如何在从抽象基派生的类中实现相同的方法?
- 基类的填充将被复制到派生类中
- 如何在不使用指针的情况下将派生类的对象作为参数传递给基类中的函数?
- 指向基类派生类的 std::unique_ptr 的指针
- 为什么基类数据在派生类数据之前初始化
- c++ 派生基类 Friend 函数访问父级上的私有函数
- 如何将基类替换为派生基类
- 当基类未指定构造函数时,如何使用仅具有带参数的构造函数的类派生基类?
- 解析公用派生基类模板中的函数模板名称时出错"Not declared in this scope"