2014-02-09 132 views
0

有人可以告訴,在這段代碼中,如何聲明構造函數,使得當對象被實例化時,height被初始化爲傳遞值,而width始終是默認值(在下面的情況下爲2)。構造函數中的成員初始化

class rectangle{ 
    int width, height; 
public: 
    // rectangle(int w = 1, int h = 1): width(w), height(h){} 
    rectangle(int w = 2, int h=1): width(w) {height = h;} 
    int getW(){return width;} 
    int getH(){return height;} 
}; 
int main() 
{ 
    rectangle r1(1); 
    rectangle r2(2); 
    rectangle r3(4); 
    rectangle r4(5); 
    cout << "w = " << r1.getW() <<" h = " << r1.getH() << endl; 
    cout << "w = " << r2.getW() <<" h = " << r2.getH() << endl; 
    cout << "w = " << r3.getW() <<" h = " << r3.getH() << endl; 
    cout << "w = " << r4.getW() <<" h = " << r4.getH() << endl; 
} 
Output with above code: 
w = 1 h = 1 
w = 2 h = 1 
w = 4 h = 1 
w = 5 h = 1 

有人可以告訴我如何聲明構造函數,以便輸出如下(我想聲明只有一個參數的對象)?

w = 1 h = 1 
w = 1 h = 2 
w = 1 h = 4 
w = 1 h = 5 

回答

3

您的問題的措詞有點不清楚。這聽起來像你想完全忽略寬度參數,只是使寬度2,而高度是可選的,默認爲1。如果是這樣的話,那麼你可以簡單地這樣做:

rectangle(int, int h=1) :width(2), height(h) {} 

但我的頭腦閱讀能力告訴我,這不是你想要的(主要是因爲這是一個愚蠢的事情)。我有你只是措辭你的問題錯了一種預感,那你真正想要的東西是這樣的:

rectangle(int w, int h) :width(w), height(h) {} // handles 2 arguments 
rectangle(int h=1) :width(2), height(h) {}  // handles 0 or 1 arguments 

這種配置允許三個呼叫簽名。

  • 2個參數,首先是寬度,第二個是高度。
  • 1的說法,都到高度,和寬度變爲2個
  • 0參數,寬度爲2,高度爲1
+0

感謝本傑明,你是正確的,我的措辭是混亂的。我正在從一個在線講座系列中學習,並且真的很想了解成員如何初始化,所以這主要是一個理論練習。一般來說,我想學習的是當有多個參數時,如何使用默認值初始化第一個參數(本例中爲寬度)。我所有的構造函數組合似乎都將這個值傳遞給了寬度,在默認情況下保持高度。那有意義嗎? – kaushal

+0

@ kaushal98:是的,這是有道理的。但是,這不可能,只有一個功能。然而,你可以用多個重載來模擬它,這就是我的答案所展現的。 –

+0

@Banjamin:抱歉不小心刪除了我之前的評論。我想這是不可能的,甚至是愚蠢的,但我仍然想確認。我們能否定義這樣的結構,使得當像矩形r1(1),r2(2),r1設置w和r2設置h時實例化? – kaushal

相關問題