需要了解如何完成我的Marina類的最後一部分。任何幫助將不勝感激。動態分配和多態 - C++
這是我正在研究的一個大項目。我創建了一組使用公共繼承從基類Boat派生的類。碼頭班代表碼頭的船隻照顧。 Marina類包含一個固定大小的指向Boat的指針數組。
如果有空間並且每艘新船都必須動態分配,該功能應該將新船放入碼頭。該功能還應詢問用戶他們想要什麼樣的船,然後將這種類型添加到陣列中的下一個空位。
需要了解如何完成我的Marina類的最後一部分。任何幫助將不勝感激。動態分配和多態 - C++
這是我正在研究的一個大項目。我創建了一組使用公共繼承從基類Boat派生的類。碼頭班代表碼頭的船隻照顧。 Marina類包含一個固定大小的指向Boat的指針數組。
如果有空間並且每艘新船都必須動態分配,該功能應該將新船放入碼頭。該功能還應詢問用戶他們想要什麼樣的船,然後將這種類型添加到陣列中的下一個空位。
錯誤提示您忘記在您的cpp文件中包含Boat.h
(或任何定義類Boat
的東西)。
但無論如何,問題出碼存在一些問題:
_m[i] = NULL;
就是i
聲明,並會引發錯誤的循環之外 - 我不能想象一個理由,它有..你說船應該動態初始化,並且該方法_add_boat
必須是無效的。恕我直言,只有兩種可行的方法:
創建船上的方法外,僅使用add_boat
把它放在碼頭(如碼頭,如果全扔除外):
void Marina::_add_boat(Boat *boat)
{
for (unsigned i = 0; i < _num_boats; i++)
{
if (_m[i] == NULL)
_m[i] = boat;
return;
}
throw std::runtime_error("Marina full");
}
用法:
Boat b = new Boat();
marina._add_boat(b);
傳遞參數初始化船
void Marina::_add_boat(int type, Owner& owner, ...) // arguments for Boat ctor
{
for (unsigned i = 0; i < _num_boats; i++)
{
if (_m[i] == NULL)
_m[i] = new Boat(type, owner, ...);
return;
}
throw std::runtime_error("Marina full");
}
下面是原來的答案只剩因爲一些有趣的評論參考,它
爲什麼不一樣的東西:
我假設你有船組成的數組(船* )在碼頭的碼頭_num_boats
。一個空的地方常常是一個NULL。它提供了:
static const unsigned int _num_boats = 100; // the value you need or a constexpr
class Marina {
Boat * boats[_num_boats];
...
Boat * Marina::_add_boat() {
for (unsigned i=0; i<_num_boats; i++) {
if (boats[i] == NULL) {
boats[i] = new Boat();
return boats[i]; // returns dynamically created Boat if room in Marina
}
}
return NULL; // return NULL if Marina full
}
}
有了這個邏輯,你把它放在碼頭後設置船的屬性...
這是不是idomatic C++,我會建議'std :: vector
我必須同意它很像舊的C ...但我沒有使用矢量,因爲大小是固定的,可以表示爲一個簡單的數組,並且不使用智能指針,因爲我無法確定OP是否需要unique_ptr或shared_ptr ......並且真的想知道這個問題是否值得回答,因爲它很難給一個好的:-( – 2015-03-31 06:10:17
使用固定大小的數組std :: array。 – Robinson 2015-04-01 22:03:54
沒有充足的這裏的信息來回答你的問題。 – 2015-03-31 05:53:03
我們需要更多信息。你如何表示碼頭(它是一個矢量,一組數據庫中的記錄,...)?同樣,你如何代表一艘船? – Brainless 2015-03-31 05:53:15
你的問題不清楚,所以我投票結束。你應該提供更多的代碼(至少是相關類的聲明)以獲得幫助。 – 2015-03-31 05:54:33