2011-12-12 42 views
1

我有一个类图,它的派生类,国王,女王,白嘴鸦,主教,典当等。另外,theres类字段,其中模拟国际象棋的特点。如何提供访问许多类,全部来自基类

现在,我的所有派生类,即国王,王后,白嘴鸦等都需要访问类字段中保存的私人信息。我如何做到这一点,而不是在课堂上手动写字段:friend class King; friend class Queen; ...?

是否有一种方法可以一次向类字段提供对所有这些类的访问?

+6

他们为什么*需要*来访问**私人**数据?这听起来可怕的错误从设计观点看法。 – Xeo

+0

我认为一个领域可以持有一块,但一块不应该访问董事会的领域。 – Gianluca

回答

4

我猜测你的衍生“图”类(国王,王后,白嘴鸦等)需要访问私人领域的数据才能移动自己?

理想情况下,我认为图类应该公开某种使用某种数据结构来描述其移动特性的公共方法,并允许该字段使用该公共方法来操作其自己的内部私有数据。每个派生类应提供自己的实现,以便它们可以返回描述其移动的正确数据结构。或者,如果您必须提供朋友访问权限,我认为您可以尝试使用friend class Figure,然后公开FIG10类中的protected方法供您的派生类使用,这些方法允许它们处理该数据。

2

重构类以便不需要访问

2

考虑为什么Figure子类需要访问Field成员。也许是因为你想要检查一个Field是否已经被另一个数字占据了呢?

如果是这样,请考虑将此逻辑转换为专用类,如Move。例如,Move把持不住“源” Field“和‘目标’Field。然后,您可以有soemthing喜欢它适用一个MoveGame(修改游戏状态)Game::apply(Move)方法。在这种情况下,只有Move班会/可能需要访问Field成员

这仅仅是一个例子;一般的想法是要弄清楚为什么所有这些Figure子类需要访问Field摆在首位,然后将这部分出成普通班