带有默认参数的c ++构造函数

时间:2012-10-23 10:11:19

标签: c++

您好我创建了这个具有默认构造函数和默认参数

的构造函数的类
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;

可能是问题所在:( 谢谢!

4 个答案:

答案 0 :(得分:8)

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

Something::Something(){}

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

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

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

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

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

答案 1 :(得分:2)

如果你没有参数调用,你将调用这个构造函数

Something::Something(){} 

而不是

Something::Something(int xx, int yy) 

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

Something::Something() : x(1),y(1) {} 
使用零参数构造函数创建对象实例时,

将导致xy设置为1。

答案 2 :(得分:0)

出现此问题的原因是您已为此编写了重载的构造函数,但是您在没有参数的情况下调用构造函数,因此默认情况下会调用默认构造函数,并且不会对您的变量进行赋值。

您必须传递参数以便调用重载的构造函数。您重载的构造函数已将默认值1指定为yy,因此,如果您只是传递一个参数,则xx将被赋予该值,而yy将在此情况下具有默认值1。但是如果您将传递这两个参数,则xx和yy将分别分配这些值。

答案 3 :(得分:-1)

  

当我创建没有参数的对象并打印它时,它会显示x = 0,y = 0;

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