请问这段C++代码中的Test setX(int a)是构造函数吗?
C++中
Test setX(int a)是否为构造函数的解答 先看你给出的这段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; }
问题解答
完全不是哦,这个setX函数和构造函数的定义差得远呢。咱们对照C++构造函数的核心特征来看:
- 构造函数的名字必须和类名完全一致:这个函数叫
setX,而类名是Test,明显不匹配; - 构造函数没有返回值类型:注意,是连
void都不能声明的那种,而setX明明确确写了返回值类型Test。
所以setX只是一个普通的成员函数,作用是修改当前对象的x成员变量,然后返回当前对象的副本(因为是值返回*this)。
这里顺便提个小细节:你代码里的链式调用obj1.setX(10).setY(20)其实不会修改obj1的y——因为setX返回的是obj1的临时副本,setY是在这个副本上修改的,修改完成后副本就被销毁了,所以最后obj1.print()会输出x = 10 y = 0。如果想让链式调用真正作用在原对象上,应该把setX和setY的返回类型改成Test&(引用返回),这样返回的就是原对象本身,setY就能修改obj1的y了。
内容的提问来源于stack exchange,提问作者Souradeep
相关产品推荐
相关产品推荐

