2016-01-18 17 views
-1

所以我目前正在研究一個小型的蟻農場模擬器jobby,並且遇到了一個問題。讀取父類的類內的C++類

第一,我有4個班在這裏我要簡化他們或代碼將被looong:

class Ant 
{ 
// Ant's stuff 
} 

class AntArray 
{ 
std::vector<Ant> Antarray; //a vector that has ants added with a function 
} 

class AntHill 
{ 
//ant hill stuff 
} 

class AntHillArray 
{ 
std::vector<AntHill> HillArray; //a vector that has hills added with a function 
} 

我有,我有在移動螞蟻的位置螞蟻類的功能,我想參考螞蟻山的座標位置,並做一個算法來確定螞蟻移動到哪裏。

我如何引用螞蟻山的數據,然後做到這一點,而沒有在Ant類中定義它作爲一個家庭變量(我想要一個螞蟻改變效忠的能力,所以說,只是移動它與一個功能以後。

謝謝,約翰

+0

如果每個螞蟻總是有一個螞蟻山,它屬於,你可以在之前聲明AntHill並向Ant添加一個AntHill&my_hill引用。 – jofel

+0

@jofel ive剛剛有一個輝煌的時刻,由於這個評論,我一直假設每個山都會有多個螞蟻陣列,但我根本不需要這個,所有螞蟻都有1個陣列,這是一個非常有用的東西謝謝= D – JohnTheDemon

回答

0

你應該有另一個類稱爲AntRelocation是作爲輸入螞蟻實例和蟻窩實例,計算移動到什麼位置,然後調用Ant.setLocation()來改變螞蟻的狀態到新的位置

這樣,你有兩種obj ects:運行你的「業務邏輯」或你的「用例」的實體對象(比如Ant,AntHill等等)和Interactor對象(比如AntRelocation,AntKiller,...)。實體對象只有被多個用例共享的方法,並且對象是內在的,就像Ant可能有一個位置,一個尺寸,一個顏色一樣。

但要確定螞蟻應該如何移動,您需要的信息不是Ant對象的一部分。 Interactor對象在這裏發揮作用。它實現了將不同來源的數據彙集在一起​​的邏輯,保持實體對象的清潔。

這是一個「用例」驅動的面向對象設計方法。它使您的實體對象保持簡單而不依賴於太多的東西,它允許您通過添加Interactor對象將用例添加到系統中,而不會擴大實體對象。

+0

我可以使用函數來做這個嗎?這樣做有什麼好處嗎? – JohnTheDemon

+0

是的。你可以用一個函數來做到這一點。我的意思是,如果你有幾個很小的函數,並且它們都屬於「AntAlgorithms」相同的一般類別,那麼你可以將它們打包爲一個名爲「AntAlgorithms」的類。 –

+0

如果一個函數很長,那麼你會想把它分成更小的函數,然後把它們全部綁在一個類中是很好的。 –