C++ 插入运算符重载与使用setter函数
在这段代码中,我重载了>>操作符来输入类对象的数据成员。也可以使用getter函数来完成。与使用setter函数相比,重载>>运算符有哪些优点C++ 插入运算符重载与使用setter函数,c++,oop,operator-overloading,C++,Oop,Operator Overloading,在这段代码中,我重载了>>操作符来输入类对象的数据成员。也可以使用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 >
#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;
}
#包括
使用名称空间std;
类点{
int x,y,z;
公众:
无效显示(){
cout>(istream&i、point&p){
i>>p.x>>p.y>>p.z;
返回i;
}
int main(){
点p1、p2、p3;
cin>>p1>>p2;//使用友元函数进行级联
返回0;
}
这不是非此即彼的情况。setter/getter是一个非常有用的全局设计特性,但您不必为了引入
符号而放弃它们
表示法(ime)主要用于可视为流的事物,特别是标准库流,但也用于表示某种数据流的自定义类
当您正在使用的对象可能会在这种上下文(数据流)中使用时,与普通的getter/setter相比,重写这些操作符会对代码的可读性和易理解性产生巨大的影响
此外,正如您在代码中所展示的,“级联”功能可以是一种非常简洁的方式来表达正在发生的事情
get
/set
getter/setter(同样是ime)更为常见,因此更有可能其他人阅读/使用您的代码会立即理解它的意义
它们还允许对正在读/写的内容进行更细粒度的控制
结论
这两种方法都有各自的用途,我想说的是,它们的使用主要取决于上下文。我很少重写这些运算符,但经常使用get/set方法,但我通常编写的代码并不涉及太多的输入/输出。这不是一种非此即彼的情况。setter/getter是一种非常有用的全局设计功能,但您不必放弃它hem将介绍
符号
表示法(ime)主要用于可视为流的事物,特别是标准库流,但也用于表示某种数据流的自定义类
当您正在使用的对象可能会在这种上下文(数据流)中使用时,与普通的getter/setter相比,重写这些操作符会对代码的可读性和易理解性产生巨大的影响
此外,正如您在代码中所展示的,“级联”功能可以是一种非常简洁的方式来表达正在发生的事情
get
/set
getter/setter(同样是ime)更为常见,因此更有可能其他人阅读/使用您的代码会立即理解它的意义
它们还允许对正在读/写的内容进行更细粒度的控制
结论
这两种方法都有各自的用途,我想说的是,使用哪种方法主要取决于上下文。我很少重写这些运算符,但经常使用get/set方法——但是我通常编写的代码并不涉及太多的输入/输出。您可以编写可读性更高的
I>>p.x>>p.y>>p.z;
使用输入运算符或getter不会真正改变本地人。setter不允许您读取文件。setter允许您设置单个成员,您的输入运算符不允许这样做。我想问的是,什么时候可以使用getter函数进行设置,为什么要重载>>。谁告诉您应该这样做的?例如,您可以从文件(或任何其他istream
)中读取。如果你不需要,那就不要这样做。重载输入运算符并提供setter是非常正交的。顺便说一句,我想你的意思是“setter”而不是“getter”否则我根本不理解这个问题。你可以使用输入操作符或getter编写一个可读性更高的I>>p.x>>p.y>>p.z;
。setter不允许你从文件中读取。setter允许你设置单个成员,而你的输入操作符不这样做。我在问什么时候可以这样做使用getter函数,我为什么要重载>>。谁告诉你应该这样做的?你可以,例如从文件(或任何其他istream
)中读取。如果你不需要,那就不要这样做。重载输入运算符并提供setter是非常正交的。顺便说一句,我想你的意思是“setter”而不是“getter”否则我根本就不懂这个问题