You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

请问这段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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 09:03:48