所以我正在写这个类的构造函数
element(int f=0, int a)
{
first = f;
inc = a;
current = first - inc;
}
将参数分配给构造函数主体中的成员变量。我被要求在main()中进行以下调用才能工作:
prog = new element(3,5);
prog = new element(5);
我无法更改(3,5)的顺序。就像在构造函数中一样,必须先传递f,然后再传递a。但是,如果没有传入任何值,则必须将f初始化为0,这样第二个调用将f保持为0,而仅将a初始化为5。
与此相关的问题是,如果我在构造函数签名中按此顺序放置参数,则会出现错误,该如何解决呢?
构造函数的此声明
element(int f=0, int a)
{
first = f;
inc = a;
current = first - inc;
}
无效。如果参数具有默认参数,则后面的参数也应具有默认参数。
您需要的是声明两个构造函数,例如:
element(int f, int a) : first( f ), inc( a )
{
current = first - inc;
}
element(int a) : element( 0, a )
{
}
希望将第二个构造函数声明为显式
explicit element(int a) : element( 0, a )
{
}
以防止从整数到类型元素的隐式转换。
首先,默认参数之后不能有非默认参数。默认参数应该是函数参数列表中的最后一个。参见:https://en.cppreference.com/w/cpp/language/default_arguments
您可以为构造函数创建重载。
element( int f, int a)
{
first = f;
inc = a;
current = first - inc;
}
element(int a) : element(0,a)
{
}
您不能在默认参数之前包含默认值的参数。因此,您需要在函数/构造函数原型中对参数进行重新排序
element(int a, int f=0)
{
first = f;
inc = a;
current = first - inc;
}
另一个替代方法是定义重载的构造函数:
element(int f, int a)
{
first = f;
inc = a;
current = first - inc;
}
element(int a)
{
first = 0;
inc = a;
current = first - inc;
}