在此代码中,我正在重载>> operator用于输入类对象的数据成员。也可以使用getter函数来完成。重载有什么好处>>运算符与使用setter函数相比?
#include<bits/stdc++.h>
using namespace std;
class point {
int x ,y ,z;
public:
void show(){
cout << x << y << z;
}
}
friend istream& operator >> (istream & i,point &);
};
istream& operator >> (istream & i,point &p){
i >> p.x >> p.y >> p.z;
return i;
}
int main(){
point p1,p2,p3;
cin >> p1 >> p2;//Cascading using friend function
return 0;
}
答案 0 :(得分:0)
这不是一个/或情况。 Setters / Getters是一个非常有用的全局设计功能,但您不必废弃它们来引入<<
/ >>
表示法。
<<
/ >>
表示法(ime)主要用于可以看作流的内容 - 特别是标准库流,但也包含代表某种流的自定义类数据。
<<
/ >>
当你正在使用的对象很可能被用于这种上下文(数据流)时,那么与普通的getter相比,覆盖这些操作符会对可读性和易于理解代码产生巨大影响setter方法。
此外,正如您在代码中所显示的那样,“级联”功能可以非常简洁地表达正在发生的事情。
get
/ set
Getters / Setters(再次使用)更常见,所以更有可能是其他人阅读/使用你的代码会立即理解它的重点。
它们还允许对正在读/写的进行更精细的控制。也许你不想写整个对象,只想写一个成员。
两者都有它们的用途,我说它主要是关于你使用它的上下文。我很少覆盖那些运算符,但经常使用get / set方法 - 但是我经常编写的代码并不涉及很多输入/输出。