2011-03-27 87 views
1

在這本書中C++入門由Stanley B.李普曼* *喬西·拉喬問題與默認參數

在第14.2章類構造它指出:

我們應該還用於指定提供支持期初餘額,但沒有客戶名稱? 碰巧,類規範明確地禁止了這一點。我們的雙參數 構造帶有默認第二個參數提供了一個完整的接口用於接受類帳戶中的數據成員,可以由用戶設置 初始值:

class Account { 
public: 
     // default constructor ... 
     Account(); 

     // parameter names are not necessary in declaration 
     Account(const char*, double=0.0); 

     const char* name() { return _name; } // What is this for?? 
     // ... 
private: 
     // ... 
}; 

以下是合法的帳戶類對象定義通過一個或兩個參數對我們的構造:

int main() 
{ 
     // ok: both invoke two-parameter constructor 
     Account acct("Ethan Stern"); 

這是如何調用2參數的構造函數時,它並沒有被聲明爲一個參數?

 Account *pact = new Account("Michael Lieberman", 5000); 

以及如何做上述線路呼叫默認參數

 if (strcmp(acct.name(), pact->name())) 
      // ... 
} 

這本書似乎是不完整的代碼非常不明確的構造函數。 需要對構造函數有一個很好的解釋。請澄清。

回答

8

這不是關於構造函數,這是關於默認參數。

void f(int x, int y = 5) 
{ 
    //blah 
} 

,當你把它提供較少的參數,它使用的默認參數的值。 例如

f(3); //equivalent to f(3, 5); 

如果函數參數之一有一個默認值,則所有後續參數必須有之輩。

void f(int x, int y = 3, int z = 4) 
{ 
    //blah 
} 

f(0); // f(0, 3, 4) 
f(1, 2); //f(1, 2, 4) 
f(10, 30, 20); //explicitly specifying arguments 

HTH