在构造函数中初始化参数的构造

时间:2021-06-09 20:55:16

标签: c++

我有一个简单但可能很愚蠢的问题。我被要求指出两种初始化方式之间的区别。我真的无法指出其中的区别。你能帮我吗?

useQuery()

3 个答案:

答案 0 :(得分:4)

假设 Aclassstruct,则:

A(int a);

定义一个 converting constructor要求调用者在创建 A 的对象实例时提供输入值,例如:

A a(12345); // OK
A a;        // ERROR

鉴于:

A(int a=3);

定义一个具有默认参数值的转换构造函数,允许调用者在需要时省略传入一个值,例如:

A a1(12345); // OK, will use a=12345
A a2;        // OK, will use a=3

由于在此构造函数中传入输入值是可选的,因此它也可以用作 Adefault constructor,除非也定义了一个,那么这对于哪个构造函数变得不明确在没有提供输入值时调用,例如:

A();
A(int a = 3);
A a; // ERROR, ambiguity

答案 1 :(得分:1)

在第一个中,您必须为构造函数提供一个 int

A(int a);

在第二个中,您可以提供 int,但如果您不提供,a 的默认值将为 3

A(int a = 3);

答案 2 :(得分:0)

A(int a); A(int a=3);

我们不能在类中一起声明上面的构造函数声明。

因为编译器会说函数已经定义。

A(int a);等于 A(int a=3);

例如,如果您有一个如下所示的构造函数

A(int value=3) { a = value; cout << "\n一个参数构造函数" << " a="<

对象创建:

A a1; A a2(6);

输出:

一个参数构造器 a=3 一个参数构造器 a=6

相关问题