2012-10-25 36 views
0

關於:在陣列C++關於:子類在數組C++

嗨,大家好,很抱歉,因爲我被困在一些工作子類。

基本上這是發生什麼事

我有一個父類調用車輛,並得到了2子類調用

Car and Motorcycle 

父類具有以下值:

string Name: value either Car or MotorCycle 
wheels : 4 or 2 (depends is car or motorcycle) 
Notes On Wheel: 
wheel[0] : Fine condition 
wheel[1] : need some repair 
wheel[2] : Fine condition 
wheel[3] : Fine condition 

我不知道我如何將這一切記錄在VehicleTwoD數組中

Car/Motorcycle is汽車的小孩班,你們建議什麼?我嘗試創建VehicleTwoD vehtwod的一個對象[100];

然後我做一個for循環提示。但我如何將對象汽車/摩托車記錄到我的VehicleTwoD數組中,以及如何在內部記錄字符串數組。因此每個VehicelTwoD數組元素都包含信息

Name (Motorcycle or Car) 
Wheel (depend on name - 2 or 4) 
String array - notes size depend on what is choosen 

我如何記錄1數組中的所有數據。

非常感謝,我知道這是多態的,我知道這是面向對象,我知道我需要學習更多。但我真的堅持這部分創建這樣的數組,可以容納其他數組。

謝謝!

+0

具有'Vehicle'的基類和'Car'或'Motorcycle'的派生類,您的數組必須是指向對象的指針(或智能指針,理想情況下)。沒有指針(或引用,但不適用於這個問題),你不會獲得我相信你正在尋找的多態性。 – WhozCraig

+0

@WhozCraig - 看起來像一個答案。 –

+0

@羅布約翰已經擁有了我將要做的很多事情了,隨便吧。 – WhozCraig

回答

2

通過不解決存儲陣列的無關維度來簡化解決方案。

創建的Vehicle指針數組,並存儲這些:

vector<unique_ptr<Vehicle>> vehicles_; 
vehicles_.push_back(new Car(...)); 
vehicles_.push_back(new Motocycle(...)); 

由於我們使用unique_ptr這裏,而不是原始指針,沒有必要明確delete

通過使類polymorphic可以在基類上聲明函數,並通過在派生類中提供定義來實現class-spefici功能。這使得通過指向基類的指針調用方法成爲可能,而不必轉換爲派生類型。

如果您需要調用僅存在於派生類上的方法,那麼您將需要投射指針。這應該使用dynamic_cast來完成,並且要求你的類是多態的。

編輯:

您的意見建議,你不知道如何使用vector寧可使用原始陣列。這也沒關係。這裏有一個簡單的例子,它使用了一個C樣式的原始指針數組。請注意,既不使用vector也不使用像unique_ptr這樣的智能指針,則會使代碼更加脆弱並且容易出錯,而且您經常必須使用Magic Number作爲數組大小(總數)。

Vehicle* vehicles_[100]; 
vehicles_[0] = new Car(...); 
vehicles_[1] = new Motorcycle(...); 
+0

有沒有其他方法可以用數組來代替矢量? –

+0

當然,你可以使用原始數組。 –

+0

我不知道我怎麼可以在我的情況下使用矢量,就像如何在課堂和.h等級聲明它 –