【问题标题】:Issue with Default Arguments默认参数问题
【发布时间】:2011-03-27 11:29:53
【问题描述】:

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

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

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

【问题讨论】:

    标签: c++ default-arguments


    【解决方案1】:

    这不是关于构造函数,而是关于默认参数。

    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

    【讨论】:

      猜你喜欢
      • 2012-12-03
      • 1970-01-01
      • 1970-01-01
      • 2010-10-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-14
      相关资源
      最近更新 更多