2011-12-12 47 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擺在首位,然後將這部分出成普通班