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

如何将重载>>运算符获取的输入值传入setter方法

解决方法:用Setter方法在重载>>运算符中设置类成员变量

没问题,这是个很常见的新手小误区,我来帮你梳理清楚~

首先看你当前的重载代码,有个明显的赋值方向错误:

insSide1 = inSides._length;
insSide2 = inSides._width;

这行代码是把类对象里已有的_length值赋给了输入变量insSide1,完全搞反了逻辑——我们应该把用户输入的insSide1设置到类的成员变量里才对。

用Setter方法修改后的重载函数

假设你已经为Rectangle类编写了对应的Setter方法(比如setLength(double)和setWidth(double)),只需要在重载的>>运算符函数里调用这些方法即可,这样既符合面向对象的封装原则,也避免了直接访问私有成员的问题:

istream& operator >> (istream& ins, Rectangle& inSides) {
    double insSide1, insSide2;
    // 一次性读取用户输入的两个边长值
    ins >> insSide1 >> insSide2;
    // 调用Setter方法将输入值设置到类成员中
    inSides.setLength(insSide1);
    inSides.setWidth(insSide2);
    return ins;
}

补充说明

  1. 如果你还没写Setter方法,这里给你一个简单的示例(放在Rectangle类的定义里):
class Rectangle {
private:
    double _length;
    double _width;
public:
    // Setter方法
    void setLength(double len) {
        _length = len;
        // 这里还可以加一些参数合法性校验,比如长度不能为负
        if (len < 0) _length = 0;
    }
    void setWidth(double wid) {
        _width = wid;
        if (wid < 0) _width = 0;
    }
    // Getter方法
    double getLength() const { return _length; }
    double getWidth() const { return _width; }
    // 打印方法
    void print() const {
        cout << "Length: " << _length << ", Width: " << _width << endl;
    }
};
  1. 你的main函数里调用getLength()和getWidth()后没有输出,要是想验证结果,可以改成这样:
int main() {
    Rectangle bothOpp;
    cin >> bothOpp;
    // 输出获取到的边长值
    cout << "获取到的长度:" << bothOpp.getLength() << endl;
    cout << "获取到的宽度:" << bothOpp.getWidth() << endl;
    bothOpp.print();
    return 0;
}

这样修改后,用户输入的值就能通过Setter方法正确设置到类的成员变量里啦~

内容的提问来源于stack exchange,提问作者InputLag

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 09:51:51