![](/img/trans.png)
[英]Ambiguity in c++ constructor when a constructor with default argument exists
[英]c++ constructor with default argument
您好,我创建了这个具有默认构造函数和默认参数的构造函数的类
Something.h
class Something // Fraction class
{
public:
Something (void); // default ctor
Something (int xx, int yy = 1 );
int x,y;
}
Something.cpp
Something::Something(){}
Something::Something(int xx, int yy)
{
x = xx;
y = yy;
}
但是当我创建没有参数的对象并打印它时,它会显示x = 0,y = 0;
可能是问题所在:(谢谢!
当你创建一个没有参数的对象时,你可以调用默认的构造函数:
Something::Something(){}
这个不初始化x
或y
,这意味着你可以得到任何适合int
值。 假设您正在使用调试配置,因此您将x
和y
初始化为0
。 不管是什么原因,你不应指望这种行为。
要使用默认参数调用构造函数,需要使用一个或两个参数调用它:
Something s1(5);
Something s2(5,6);
编辑如果要确保默认构造函数零初始化x
和y
,可以在初始化列表中显式执行:
Something::Something() : x(0), y(0) {}
如果不使用参数调用,则将调用此构造函数
Something::Something(){}
而不是这个
Something::Something(int xx, int yy)
所以你的初始化代码不会被调用,因为你没有明确提供,你会在初始化整数成员时得到一个默认值 - 在这种情况下它是零,但它可以是任何整数值。 因此,最好在构造函数实现中初始化成员变量。 例如,像这样实现它
Something::Something() : x(1),y(1) {}
当您使用零参数构造函数创建对象的实例时,将导致x
和y
设置为1。
出现此问题的原因是您已为此编写了重载的构造函数,但是您在没有参数的情况下调用构造函数,因此默认情况下会调用默认构造函数,并且不会对变量进行赋值。
您必须传递参数以便调用重载的构造函数。 您重载的构造函数已将默认值1指定为yy,因此,如果您只是传递一个参数,则xx将被赋予该值,而yy将在此情况下具有默认值1。 但是如果您将传递这两个参数,则xx和yy将分别分配这些值。
当我创建没有参数的对象并打印它时,它会显示x = 0,y = 0;
默认情况下,实例字段初始化为其默认值。 对于int
数据类型,默认值为0
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.