【问题标题】:Initializing ungiven constructor arguments, how? [duplicate]初始化未给定的构造函数参数,如何? [复制]
【发布时间】:2014-07-21 11:21:01
【问题描述】:

我正在尝试在构造函数中添加一个额外的参数:

例如添加参数'y'

public Object(int x, int y) {
  int x1;
  int y1;
  x1=x;
  y1=y;
}

原来的构造函数是

public Object(int x) {
  int x1;
  int y1;
  x1=x;
  y1=(default number);
}

我知道在 Java 中,如果没有给出 y,您可以执行类似 this(x, 1) 的操作将 y 设置为 1,但我想我读到构造函数调用构造函数在 C++ 中不起作用?

有没有办法在没有给出 y 时初始化它,即确保 (1)(2) 都可以工作?

Object o1 = new Object (5);   // (1)
Object o2 = new Object (5,3); // (2)

【问题讨论】:

  • 与其试图用不存在(因此毫无意义)的语法向我们展示您的意思,不如解释您的意图。

标签: c++ constructor


【解决方案1】:

注意: 对于初学者,您将 java 的语法与 C++ 的语法混淆了,您在帖子中的内容不是有效的 C++。在任一情况下;您正在查看的内容可以使用 默认参数构造函数委托* (c++11) 来解决。


替代方案 #1:默认参数

在函数声明中添加 默认参数 可以调用函数,在本例中为构造函数,而无需指定值。


#include <iostream>

class Obj {
  public:
    Obj (int x, int y = 123) {
       std::cout << "x: " << x << ", y: " << y << std::endl;
    }

    ...
};

Obj a (1);
Obj b (2, 3);

输出

x: 1, y: 123
x: 2, y: 3


备选方案 #2:建设者代表团

C++11 中,您可以使用 mem-initializer 从一个构造函数调用另一个构造函数,如下例所示。输出将与使用 默认参数 的示例相同。

class Obj {
  public:
     Obj (int x, int y) { // (1)
       std::cout << "x: " << x << ", y: " << y << std::endl;
     }

     Obj (int x)
       : Obj (x, 123)     // call (1)
     { }
};

Obj a (1);
Obj b (2, 3);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-02
    • 2022-07-06
    • 2023-03-05
    • 1970-01-01
    相关资源
    最近更新 更多