c++ - 默认参数问题

标签 c++ default-arguments

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

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

我们是否还应该支持指定期初余额但不指定客户名称? 碰巧的是,类规范明确不允许这样做。我们的双参数 带有默认第二个参数的构造函数提供了一个完整的接口(interface)来接受 可由用户设置的 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() ))
             // ...
}

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

最佳答案

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

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

关于c++ - 默认参数问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5448930/

相关文章:

C++ 继承 - 引用类型的无效初始化

c++ - 模板重构

c++ - OpenGL: Gamma 校正后的图像看起来不是线性的

c++ - boost 库更新后模板函数调用不起作用

c++ - 有没有办法确保传递给函数的两个参数在 C++ 中被视为第一个和第三个参数?

c++ - 我的方法需要使用更少的运算符

接受默认参数的 C 函数

c++ - 如何为概念输入参数分配默认参数

c++ - 如何转发声明已在其他地方使用默认值转发声明的模板类型

templates - 模板表达式的默认参数