繁体   English   中英

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

[英]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(){}

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

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

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

编辑如果要确保默认构造函数零初始化xy ,可以在初始化列表中显式执行:

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

如果不使用参数调用,则将调用此构造函数

Something::Something(){} 

而不是这个

Something::Something(int xx, int yy) 

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

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

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM