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

时间:2018-04-08 18:51:57

标签: 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; 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构造函数吗?如果没有,他们是什么?任何帮助将不胜感激。

4 个答案:

答案 0 :(得分:2)

该类只有一个构造函数

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

这是默认的构造函数,因为它可以被调用withoit arguments ..

构造函数名称与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);

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

方法应至少声明为

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

如果函数具有返回类型Test,那么这个语句

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

产生输出

x = 10 y = 0

如果声明函数的返回类型为Test&amp;那么上述陈述的输出将是

x = 10 y = 20

答案 1 :(得分:1)

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

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

setXsetY类的正常成员函数,而不是构造函数,因为它们的返回类型是类名并不能生成他们是构造函数。

其次,如果setXsetYconstructor,则您不必像obj1.setX(10).setY(20);一样调用,因为构造函数会在创建对象时自动调用。< / p>

答案 2 :(得分:0)

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

你所拥有的是 setters

大多数setters返回void

答案 3 :(得分:0)

不,他们不是建设者。

返回&#39;这个&#39;可以一个接一个地链接在一起。

e.g`a.setX(1).setY(2);

其中aTest

的实例