我今天在网上看到了这段代码:
#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构造函数吗?如果没有,他们是什么?任何帮助将不胜感激。
答案 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 */
setX
和setY
是类的正常成员函数,而不是构造函数,因为它们的返回类型是类名并不能生成他们是构造函数。
其次,如果setX
和setY
为constructor
,则您不必像obj1.setX(10).setY(20);
一样调用,因为构造函数会在创建对象时自动调用。< / p>
答案 2 :(得分:0)
构造函数将类的名称作为方法名称。
你所拥有的是 setters 。
大多数setters
返回void
。
答案 3 :(得分:0)
不,他们不是建设者。
返回&#39;这个&#39;可以一个接一个地链接在一起。
e.g`a.setX(1).setY(2);
其中a
是Test