C++构造函数参数

C++ constructor parameters

本文关键字:参数 构造函数 C++      更新时间:2023-10-16

所以我今天在为一个简单的坐标系做了长时间的休息后写了一些C++,我想我想要一个构造函数接受 2 个值,这样我就可以写出类似"坐标 c = 新坐标(1,2(;"之类的东西

struct Coordinates {
   int x;
   int y;
   Coordinates(int a, int b) {
      x = a;
      y = b;
   }
};

当在Cygwin中编译时,我得到:

$ g++ -o 冒险冒险.cpp 冒险.cpp:36:错误:调用"坐标::坐标(("没有匹配函数 冒险.cpp:22:注意:候选人是:坐标::坐标(常量坐标&( 冒险.cpp:26: 注:坐标::坐标(int, int(

不确定这里出了什么问题,我找不到有关C++结构构造函数的太多信息。有什么想法吗?

在代码的第 36 行(您没有显示(中,您正在创建此类的对象,但您没有向构造函数传递任何参数。唯一有效的构造函数是接受两个整数的构造函数或默认复制构造函数。添加不带参数的构造函数,或更改代码以将ab传递给构造函数。

通过编写显式构造函数,您禁用了默认构造函数的自动创建,该构造函数在定义没有构造函数参数的对象时使用,如 Coordinates coords; .您必须像这样显式提供它:

struct Coordinates {
  int x;
  int y;
  Coordinates(int a, int b) {
    x = a;
    y = b;
  }
  Coordinates(): x(0), y(0) {}
};
请注意,我在默认构造

函数中初始化了成员变量;这不是强制性的,但这是一个好主意,否则即使使用编译器生成的构造进行默认初始化,它们也将未定义。

另请注意,我在构造函数主体中使用了成员初始值设定项(: x(0), y(0)部分(而不是赋值。这是一个很好的风格,因为类对象通常提供更好的性能,并且在某些情况下是初始化成员的唯一方法(例如,如果它是const类型或没有默认构造函数(。

请注意,在 C++11 中,您可以告诉编译器生成与没有其他构造函数相同的默认构造函数,只需编写

Coordinates() = default;

在类定义中。