2015-11-07 102 views
0

在解決我如何去做任務時遇到了一些麻煩。這個任務涉及到包對象我們被告知有一個叫做CPackages的基類,以及從它派生的兩個類,分別叫做COverNightPackageCTwoDayPackage。這很好,我可以做到這一點。C++派生類

我遇到的問題是,過夜包可能或可能沒有快遞。如果需要快遞員,則需要記錄公司名稱,地址等詳細信息。如果包裹需要信使,當所有包裹的細節被顯示時,必須說明是否需要包裹。還會有另一個菜單選項來顯示使用的信使的所有細節。

添加快遞員的最佳方式是什麼?做一個快遞課程?我已經堅持了幾天,現在還沒有做過類似的事情。

+0

是的,製作一個「Courier」課是必需的。 –

+0

這是http://programmers.stackexchange.com/的問題。 – JoulinRouge

+0

存儲一個指向「courier」對象的指針。如果它是NULL,則沒有快遞。如果它不是NULL,那麼'courier'將指向一個包含詳細信息的類(公司名稱,地址等) – stackptr

回答

0

事實上,你會需要一個Courier類,你應該將COverNightPackage類中存儲指向這個Courier類。你只是想確保當沒有Courier時這個指針被設置爲NULL。要做到這一點,你應該爲你的COverNightPackage創建兩個構造函數。爲每個構造函數使用初始值設定項,以確保指向Courier類的指針初始化爲NULL或指向Courier類。

class Courier; 

class COverNightPackage: public CPackages { 
public: 
    COverNightPackage() 
    : m_courier(NULL) 
    { } 

    COverNightPackage(Courier* courier) 
    : m_courier(courier) 
    { } 

private: 
    Courier* m_courier; 
} 

或者,您也可以做到這一點使用單個構造函數的NULL

class Courier; 

class COverNightPackage: public CPackages { 
public: 
    COverNightPackage(Courier* courier = NULL) 
    : m_courier(courier) { } 

private: 
    Courier* m_courier; 
} 

默認參數。如果調用構造函數不帶參數,Courier指針會被初始化爲NULL

0

是的,你需要一個快遞課程。現在告訴你的班級是否需要快遞員,你有兩種方法。您可以創建在類的構造函數這需要快遞類對象作爲null.Some東西一樣

#include <iostream> 
using namespace std; 

class { 
    public: 
    Courier(); 
}; 
Courier::Courier(){ 

}; 

class COverNightPackage { 
    public: 
    COverNightPackage(Courier* obj); 
}; 

COverNightPackage::COverNightPackage(Courier* obj){ 
     if(obj == NULL){ 
      cout<<"Courier is null"<<"\n"; 
     }else{ 
      cout<<"Courier is not null"<"\n"; \\ Store package info here 
     } 

}; 
int main() { 
    Courier* o2 = new Courier(); 
    COverNightPackage* o1 = new COverNightPackage(NULL); 
    COverNightPackage* o3 = new COverNightPackage(o2); 
    return 0; 
} 

現在你可以將其值存儲,按您的方便。顯示值時,您可以檢查快遞員類是否爲空。

第二種方法可能是在類中保留一個Courier類對象,並提供一個setter來幫助用戶在運行時設置值。 希望它會幫助你:-)

+0

在你的示例中_'COverNightPackage(Courier obj)'_'obj'不能爲null,它是按值傳遞的。你真的在談論C#代碼嗎? –

+0

@ peter你是對的。由於我只是在拋出一些想法,我並沒有對實際的語法給予太多的關注。這是我用實際語法創建的代碼。我改變了我的答案,給出了實際的語法 – maneet