繁体   English   中英

默认参数为非静态成员变量

[英]Default arguments as non-static member variables

我想创建一个类,它有两个整数成员变量,以及一个有两个可选参数的函数。 如果提供了这些参数,则函数返回它们的总和; 如果未提供这些参数,则该函数返回其两个成员变量的总和。

这是代码:

class Foo
{
private:
    int x_;
    int y_;
public:
    Foo(int x, int y) : x_(x), y_(y){}
    int Bar(int a = x_, int b = y_)
    {
        int z = a + b;
        return z;
    }
};

但是,我收到以下编译错误:

invalid use of non-static data member 'Foo::x_'
int x_;
    ^
invalid use of non-static data member 'Foo::y_'
int y_;
    ^

这表明成员变量必须是静态的,才能将它们用作函数中的默认参数。 但我不希望它们是静态的......

解决办法是什么?

超载Bar

int Bar()
{
    return x_ + y_;
}

int Bar(int x)
{
    return x + y_;
}

int Bar(int x, int y)
{
    return x + y;
}

感谢@ Jarod42的改进:

int Bar(int a, int b)
{
    return a + b;
}

int Bar(int a)
{
    return Bar(a, y_);
}

int Bar()
{
    return Bar(x_, y_);
}

你试图解决的现实世界问题更有可能从这个重构中受益,而不是总结两个数字的原始问题。 这种行为更明显地与您希望通过默认参数实现的行为相同。

解决方法是将Bar函数重载为:

int Bar()
{
    return x_ + y_;
}
int Bar(int a)
{
    return a + y_;
}
int Bar(int a, int b)
{
    return a + b;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM