2015-03-31 42 views
-3

需要了解如何完成我的Marina類的最後一部分。任何幫助將不勝感激。動態分配和多態 - C++

這是我正在研究的一個大項目。我創建了一組使用公共繼承從基類Boat派生的類。碼頭班代表碼頭的船隻照顧。 Marina類包含一個固定大小的指向Boat的指針數組。

如果有空間並且每艘新船都必須動態分配,該功能應該將新船放入碼頭。該功能還應詢問用戶他們想要什麼樣的船,然後將這種類型添加到陣列中的下一個空位。

+3

沒有充足的這裏的信息來回答你的問題。 – 2015-03-31 05:53:03

+1

我們需要更多信息。你如何表示碼頭(它是一個矢量,一組數據庫中的記錄,...)?同樣,你如何代表一艘船? – Brainless 2015-03-31 05:53:15

+0

你的問題不清楚,所以我投票結束。你應該提供更多的代碼(至少是相關類的聲明)以獲得幫助。 – 2015-03-31 05:54:33

回答

1

錯誤提示您忘記在您的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 
    } 
} 

有了這個邏輯,你把它放在碼頭後設置船的屬性...

+3

這是不是idomatic C++,我會建議'std :: vector '或'std :: vector >' – 2015-03-31 06:03:48

+1

我必須同意它很像舊的C ...但我沒有使用矢量,因爲大小是固定的,可以表示爲一個簡單的數組,並且不使用智能指針,因爲我無法確定OP是否需要unique_ptr或shared_ptr ......並且真的想知道這個問題是否值得回答,因爲它很難給一個好的:-( – 2015-03-31 06:10:17

+1

使用固定大小的數組std :: array。 – Robinson 2015-04-01 22:03:54