2011-03-27 83 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