具有一个默认参数和一个可变参数的 C++ 构造函数
C++ constructor with one default parameter and one variable parameter
我正在写这个 class 构造函数:
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
类型:
explicit element(int a) : element( 0, a )
{
}
首先,默认参数后不能有非默认参数。默认参数必须位于函数参数列表的最后。参见 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;
}
我正在写这个 class 构造函数:
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
类型:
explicit element(int a) : element( 0, a )
{
}
首先,默认参数后不能有非默认参数。默认参数必须位于函数参数列表的最后。参见 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;
}