这是构造函数吗(C++)

Is this a constructor (C++)

我今天在网上看到这段代码:

#include<iostream>
using namespace std;

class Test
{
private:
  int x;
  int y;
public:
  Test (int x = 0, int y = 0) { this->x = x; this->y = y; }
  Test setX(int a) { x = a; return *this; }
  Test setY(int b) { y = b; return *this; }
  void print() { cout << "x = " << x << " y = " << y << endl; }
};

int main()
{
  Test obj1;
  obj1.setX(10).setY(20);
  obj1.print();
  return 0;
}

这里看到这些行:

Test setX(int a) { x = a; return *this; }
Test setY(int b) { y = b; return *this; }

setX 和 setY 是构造函数吗?如果不是,它们是什么?任何帮助将不胜感激。

构造函数将 class 的名称作为方法名称。

你所拥有的被称为 setters

settersreturnvoid.

class只有一个构造函数

Test (int x = 0, int y = 0) { this->x = x; this->y = y; }

这是默认构造函数,因为它可以在没有参数的情况下调用..

构造函数名称与class.name相同。

所以这些

  Test setX(int a) { x = a; return *this; }
  Test setY(int b) { y = b; return *this; }

是两个 non-static 名为 setX 和 setY 的成员函数,它们有一个 int 类型和 return 类型 Test 的参数。应用函数的对象的函数 return 个副本。

例如这个语句

obj1.setX(10).setY(20);

没有意义,因为调用 setY 被应用到临时对象 return 通过调用 objq.setX( 10 ).

方法的声明至少要像

  Test & setX(int a) { x = a; return *this; }
  Test & setY(int b) { y = b; return *this; }

如果函数具有 return 类型 Test,则此语句

  obj1.setX(10).setY(20);
  obj1.print();

产生产出

x = 10 y = 0

如果使用 return 类型 Test 声明函数,则上述语句的输出将为

x = 10 y = 20

下面是constructor(构造函数意味着class名称和成员函数名称应该相同并且它不应该有任何return类型)

Test (int x = 0, int y = 0) { this->x = x; this->y = y; } /* constructor */

setXsetY 是 class 的 普通成员函数 而不是构造函数,因为它们的 return 类型是class-name 不会使它们成为构造函数。

其次,如果 setXsetYconstructor,那么您不必像 obj1.setX(10).setY(20); 那样调用,因为每当创建对象时都会自动调用构造函数。

不,他们不是构造函数。

return'this'的方法可以一个接一个地串联起来

例如`a.setX (1).setY (2);

其中 aTest

的实例