带有一个默认参数和一个可变参数的 C++ 构造函数

Jad*_*Jad 1 c++ constructor class default-arguments

我正在编写此类构造函数:

element(int f=0, int a)
{
    first = f;
    inc = a;
    current = first - inc;
}
Run Code Online (Sandbox Code Playgroud)

参数被分配给构造函数体中的成员变量。我被要求接听以下电话main()才能工作:

prog = new element(3,5);
prog = new element(5);
Run Code Online (Sandbox Code Playgroud)

我无法更改(3,5). 就像在构造函数中一样,f需要先传递,然后再传递a。但是,f如果没有传入值,则需要初始化为 0,这样第二次调用就保持f为 0,而只初始化a为 5。

这样做的问题是,如果我在构造函数签名中按此顺序放置参数,则会出现错误。

我该如何解决这个问题?

Vla*_*cow 5

构造函数的这个声明是无效的:

element(int f=0, int a)
{
    first = f;
    inc = a;
    current = first - inc;
}
Run Code Online (Sandbox Code Playgroud)

如果参数具有默认参数,则所有后续参数也必须具有默认参数。

您需要的是声明两个构造函数,例如:

element(int f, int a) : first( f ), inc( a )
{
    current = first - inc;
}

element(int a) : element( 0, a )
{
}
Run Code Online (Sandbox Code Playgroud)

最好声明第二个构造函数explicit以防止从单个整数到element类型的隐式转换:

explicit element(int a) : element( 0, a )
{
}
Run Code Online (Sandbox Code Playgroud)