如何将重载>>运算符获取的输入值传入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; }
补充说明
- 如果你还没写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; } };
- 你的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
相关产品推荐
相关产品推荐

