Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/139.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 插入运算符重载与使用setter函数_C++_Oop_Operator Overloading - Fatal编程技术网

C++ 插入运算符重载与使用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 >

在这段代码中,我重载了>>操作符来输入类对象的数据成员。也可以使用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;
}
#包括
使用名称空间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”否则我根本就不懂这个问题