您好我创建了这个具有默认构造函数和默认参数
的构造函数的类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;
可能是问题所在:( 谢谢!
答案 0 :(得分:8)
当你创建一个没有参数的对象时,你可以调用默认的构造函数:
Something::Something(){}
这一 初始化x
或y
,这意味着您可以获得适合int
的任何值。大概您正在使用调试配置,因此您将x
和y
初始化为0
。不管是什么原因,你都不应指望这种行为。
要使用默认参数调用构造函数,需要使用一个或两个参数调用它:
Something s1(5);
Something s2(5,6);
编辑如果您想确保默认构造函数为零初始化x
和y
,您可以在初始化列表中明确地执行此操作:
Something::Something() : x(0), y(0) {}
答案 1 :(得分:2)
如果你没有参数调用,你将调用这个构造函数
Something::Something(){}
而不是
Something::Something(int xx, int yy)
所以你的初始化代码不会被调用,因为你没有明确提供,你会在初始化整数成员时得到一个默认值 - 在这种情况下它是零,但它可以是任何整数值。因此,最好在构造函数实现中初始化成员变量。例如,像这样实现它
Something::Something() : x(1),y(1) {}
使用零参数构造函数创建对象实例时,将导致x
和y
设置为1。
答案 2 :(得分:0)
出现此问题的原因是您已为此编写了重载的构造函数,但是您在没有参数的情况下调用构造函数,因此默认情况下会调用默认构造函数,并且不会对您的变量进行赋值。
您必须传递参数以便调用重载的构造函数。您重载的构造函数已将默认值1指定为yy,因此,如果您只是传递一个参数,则xx将被赋予该值,而yy将在此情况下具有默认值1。但是如果您将传递这两个参数,则xx和yy将分别分配这些值。
答案 3 :(得分:-1)
当我创建没有参数的对象并打印它时,它会显示x = 0,y = 0;
默认情况下,实例字段初始化为其默认值。对于int
数据类型,默认值为0