2

你好,我创建了这个类,它有一个默认构造函数和一个带默认参数的构造函数

Something.h

class Something  // Fraction class
{
public:
      Something (void); // default ctor
      Something (int xx, int yy = 1 );
          int x,y; 
}         

东西.cpp

Something::Something(){}

Something::Something(int xx, int yy)
{
    x = xx;
    y = yy;
} 

但是当我制作没有参数的对象并打印它时,它会显示 x = 0, y = 0;

问题可能出在哪里:(谢谢!

4

4 回答 4

8

当你创建一个没有参数的对象时,你调用默认构造函数:

Something::Something(){}

这个初始化xor y,这意味着您可以获得任何适合int. 大概您正在使用调试配置,因此您获得xy初始化为0. 不管是什么原因,你都不应该指望这种行为。

要使用默认参数调用构造函数,您需要使用一个或两个参数调用它:

Something s1(5);
Something s2(5,6);

编辑如果您想确保您的默认构造函数零初始化xy您可以在初始化列表中显式执行此操作:

Something::Something() : x(0), y(0) {}
于 2012-10-23T10:14:09.757 回答
2

如果你不带参数调用,你将调用这个构造函数

Something::Something(){} 

而不是这个

Something::Something(int xx, int yy) 

所以你的初始化代码不会被调用,因为你没有明确提供,你将在初始化整数成员时获得一个默认值 - 在这种情况下它为零,但它可以是任何整数值。因此,最好在构造函数实现中初始化成员变量。例如像这样实现它

Something::Something() : x(1),y(1) {} 

当您使用零参数构造函数创建对象的实例时,将导致x并设置为 1。y

于 2012-10-23T10:14:00.560 回答
0

这个问题的原因是你已经为此编写了重载的构造函数,但是你调用了没有参数的构造函数,所以默认情况下调用了默认构造函数,并且没有对你的变量进行赋值。

您必须传递参数才能调用重载的构造函数。您重载的构造函数已为 yy 分配了默认值 1,因此如果您仅传递一个参数,则 xx 将被分配该值,并且在这种情况下 yy 将具有默认值 1。但是,如果您将传递两个参数,则会分别为 xx 和 yy 分配这些值。

于 2012-10-23T12:08:55.263 回答
-1

当我制作没有参数的对象并打印它时,它将显示 x = 0, y = 0;

默认情况下,实例字段被初始化为其默认值。对于int数据类型,默认值为0

于 2012-10-23T10:14:06.417 回答