1

在 Stanley B. Lippman* * Josée Lajoie的 C++ Primer 一书中

在 Class Constructors 的第 14.2 章中,它指出:

我们是否还应该支持指定期初余额但没有客户名称?碰巧的是,类规范明确禁止这样做。我们的带有默认第二个参数的双参数构造函数提供了一个完整的接口,用于接受用户可以设置的 Account 类的数据成员的初始值

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:
       // ...
};

以下是向我们的构造函数传递一个或两个参数的合法 Account 类对象定义:

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() ))
             // ...
}

这本书似乎非常不清楚,代码不完整。需要对构造函数进行很好的解释。请澄清。

4

1 回答 1

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

高温高压

于 2011-03-27T11:32:21.377 回答