C++ 作为非静态成员变量的默认参数
我想创建一个类,它有两个整数成员变量,和一个函数,它有两个可选参数。如果提供了这些参数,函数将返回它们的总和;如果未提供这些参数,函数将返回其两个成员变量之和 代码如下:C++ 作为非静态成员变量的默认参数,c++,C++,我想创建一个类,它有两个整数成员变量,和一个函数,它有两个可选参数。如果提供了这些参数,函数将返回它们的总和;如果未提供这些参数,函数将返回其两个成员变量之和 代码如下: 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;
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_;
^
这表明成员变量必须是静态的,才能在函数中将其用作默认参数。但我不希望它们是静态的
解决方案是什么?过载
条
:
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_);
}
与两个数字求和的原始问题相比,您试图解决的实际问题更有可能从重构中获益。此行为显然与您希望通过默认参数实现的行为完全相同。一种解决方法是将
条
函数重载为:
int Bar()
{
return x_ + y_;
}
int Bar(int a)
{
return a + y_;
}
int Bar(int a, int b)
{
return a + b;
}
是的,它们必须是静态的,我会在其他版本中调用
Bar(int,int)
来分解代码(我的意思是intbar(){returnbar(x,y)}
),我会在其他版本中调用Bar(int,int)
来分解代码(我的意思是intbar(){returnbar(x,y)}
)@Jarod42很好。我认为你的表达方式更优雅。