【问题标题】:Overloading of insertion operator Versus using setter function插入运算符的重载与使用 setter 函数
【发布时间】:2017-07-14 09:45:44
【问题描述】:

在这段代码中,我重载了 >> 运算符来输入类对象的数据成员。也可以使用 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;
}

【问题讨论】:

  • 你可以写一个更易读的i &gt;&gt; p.x &gt;&gt; p.y &gt;&gt; p.z;
  • 使用输入运算符或吸气剂并不是真正的替代品。二传手不允许你例如从文件中读取。设置器允许您设置单个成员,您的输入运算符不
  • 完成了。我在问什么时候可以使用 getter 函数完成相同的操作,为什么要重载 >>.
  • 谁告诉你应该这样做的?例如,您可以从文件(或任何其他istream)中读取。如果你不需要那个,那么就不要这样做。重载输入运算符并提供设置器是相当正交的
  • 顺便说一句,我认为您的意思是“setter”而不是“getter”,否则我根本不明白这个问题

标签: c++ oop operator-overloading


【解决方案1】:

这不是非此即彼的情况。 Setters/Getters 是一个相当有用的全局设计特性,但您不必为了引入 &lt;&lt;/&gt;&gt; 符号而废弃它们。

&lt;&lt;/&gt;&gt; 表示法 (ime) 主要用于可被视为流的事物 - 特别是标准库流,但也用于表示某种数据流的自定义类。

&lt;&lt;/&gt;&gt;的优点

当您使用的对象可能在这种上下文(数据流)中使用时,与普通 getter 相比,重写这些运算符会对代码的可读性和易于理解产生巨大影响/二传手。

此外,正如您在代码中所展示的,“级联”功能可以非常简洁地表达正在发生的事情。

get/set的优点

Getter/Setter(再次强调)更为常见,因此阅读/使用您的代码的其他人更有可能立即理解其中的意义。

它们还允许对正在读取/写入的 内容进行更细粒度的控制。也许您不想编写整个对象,而只想编写其中的一个成员。

结论

两者都有其用途,我想说这主要取决于您使用的上下文。我很少重写这些运算符,但经常使用 get/set 方法 - 但是我通常编写的代码不会涉及太多输入/输出。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-08-10
    • 2015-01-07
    • 1970-01-01
    • 2015-01-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多