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,那就更好了,然后它们可以用于表达式中。除了在本例中它们返回副本之外,这使得链接的使用不那么有用(也更容易混淆),但我正在考虑其意图。