C++ 这是一个构造函数(C+;+;)

C++ 这是一个构造函数(C+;+;),c++,declaration,construct,C++,Declaration,Construct,我今天在网上看到了这个代码: #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; re

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

#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;
}

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

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

你们所拥有的被称为二传手


大多数
setter
返回
void

该类只有一个构造函数

Test (int x = 0, int y = 0) { this->x = x; this->y = y; }
这是默认构造函数,因为可以使用OIT参数调用它

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

那么这些

  Test setX(int a) { x = a; return *this; }
  Test setY(int b) { y = b; return *this; }
是两个名为setX和setY的非静态成员函数,它们有一个int类型的参数和返回类型Test。函数返回应用函数的对象的副本

比如说这句话

obj1.setX(10).setY(20);
  obj1.setX(10).setY(20);
  obj1.print();
没有意义,因为调用setY应用于调用objq.setX(10)返回的临时对象

这些方法至少应该声明为

  Test & setX(int a) { x = a; return *this; }
  Test & setY(int b) { y = b; return *this; }
如果函数具有返回类型测试,则此语句

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

x = 10 y = 0
如果要使用返回类型Test声明函数,则上述语句的输出将是

x = 10 y = 20

下面一个是
构造函数
(构造函数意味着类名和成员函数名应该相同&它不应该有任何返回类型)

setX
setY
是类的正常成员函数,而不是构造函数的,因为它们的返回类型是类名称,而不是构造函数


其次,如果
setX
setY
constructor
,则不必像
obj1.setX(10.setY(20)那样调用只要创建对象,就会自动调用构造函数。

不,它们不是构造函数

返回“this”的方法可以一个接一个地链接在一起

例如'a.setX(1)、setY(2)


其中
a
Test

的一个实例,它们是返回类型为
Test
否的函数。它们不是构造函数。@Souradeep,只需搜索“c++中的构造函数”并查看类似的链接:我假定它们是可链接的setter,但是在这种情况下,返回类型应该是
Test&
。事实上,它们是setter和factory方法。如果它们不返回void,那就更好了,然后它们可以用于表达式中。除了在本例中它们返回副本之外,这使得链接的使用不那么有用(也更容易混淆),但我正在考虑其意图。