在C ++中使用友函数进行I / O操作符重载

用户名

我自己学习c ++。我正在研究运算符重载,我能够理解加减运算符重载。但是I / O操作符的重载有点令人困惑。我已经为复数创建了一个类,现在我正在重载运算符。

来自Complex.h的函数原型

friend ostream& operator<<(ostream&, const Complex&);

来自Complex.cpp的函数

ostream& operator<<(ostream& os, const Complex& value){
os << "(" << value.r <<", "
<< value.i << ")" ;
return os;
}
  1. 谁能在基本水平上解释为什么我们必须在这里使用友元函数声明?
  2. 为什么我们必须通过引用传递所有参数和运算符的返回类型?
  3. 该函数在不使用const的情况下可以正常工作,但是为什么在这里使用const?将Complex用作常量引用的好处是什么?
量子开发

对于friend ostream& operator<<(ostream&,const Complex&);

  1. 因为您在这里声明了一个自由函数,并且希望它访问对象的内部(私有/受保护)Complex对于那些重载,使用“无好友功能”是很常见的,但肯定不是强制性的。

  2. 因为流是不可复制的(这没有意义,另请参阅本文),所以按值传递将需要复制。Complex通过价值传递也将需要无用的副本。

  3. 因为这些输出运算符不应该修改它们正在处理的对象(输入运算符显然是),所以请添加const以确保这样做。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在C ++中使用友函数进行I / O操作符重载

来自分类Dev

使用操作符int()而不是操作符+的C ++

来自分类Dev

C ++在操作符重载函数内创建,分配新变量并将其与两个对象进行比较

来自分类Dev

在重载的<<运算符内使用<<操作符

来自分类Dev

传递对模板函数调用操作符重载的引用

来自分类Dev

传递对模板函数调用操作符重载的引用

来自分类Dev

C ++和汇编语言:使用ASM调用“新操作符”和“删除操作符”

来自分类Dev

在操作符重载中使用可变参数模板合法吗?

来自分类Dev

在模板化类中重载<<操作符会给我链接器错误(C ++)

来自分类Dev

在模板化类中重载<<操作符会给我链接器错误(C ++)

来自分类Dev

在另一个类的另一个<<重载中使用重载<<操作符

来自分类Dev

为什么此操作符<重载函数对STL算法不可见?

来自分类Dev

重载函数调用操作符(),用于索引和分配模板对象

来自分类Dev

Java操作符使用字符串+字符重载

来自分类Dev

如何使用共享基类重载派生类的<<操作符?

来自分类Dev

C ++运算符I / O重载

来自分类Dev

带操作符说明的C宏

来自分类Dev

C ++定义内部类的<<操作符

来自分类Dev

<<操作符模板的实现// C ++

来自分类Dev

C ++定义内部类的<<操作符

来自分类Dev

编译代码时出错 | 操作符在模板定义下重载,使用 VS2017 Update8.2

来自分类Dev

RecognizeWithUIAsync无法使用等待操作符

来自分类Dev

使用 NSPredicate 的 `array[FIRST]` 操作符

来自分类Dev

在Pandas数据框.loc中使用Python的in操作符

来自分类Dev

使用NumPy函数进行元素操作比操作符更快吗?

来自分类Dev

C ++成员访问/间接操作符对等

来自分类Dev

C ++获取没有操作符的变量地址

来自分类Dev

具有操作符的C ++ const指针[]

来自分类Dev

模板中的<操作符重载

Related 相关文章

  1. 1

    在C ++中使用友函数进行I / O操作符重载

  2. 2

    使用操作符int()而不是操作符+的C ++

  3. 3

    C ++在操作符重载函数内创建,分配新变量并将其与两个对象进行比较

  4. 4

    在重载的<<运算符内使用<<操作符

  5. 5

    传递对模板函数调用操作符重载的引用

  6. 6

    传递对模板函数调用操作符重载的引用

  7. 7

    C ++和汇编语言:使用ASM调用“新操作符”和“删除操作符”

  8. 8

    在操作符重载中使用可变参数模板合法吗?

  9. 9

    在模板化类中重载<<操作符会给我链接器错误(C ++)

  10. 10

    在模板化类中重载<<操作符会给我链接器错误(C ++)

  11. 11

    在另一个类的另一个<<重载中使用重载<<操作符

  12. 12

    为什么此操作符<重载函数对STL算法不可见?

  13. 13

    重载函数调用操作符(),用于索引和分配模板对象

  14. 14

    Java操作符使用字符串+字符重载

  15. 15

    如何使用共享基类重载派生类的<<操作符?

  16. 16

    C ++运算符I / O重载

  17. 17

    带操作符说明的C宏

  18. 18

    C ++定义内部类的<<操作符

  19. 19

    <<操作符模板的实现// C ++

  20. 20

    C ++定义内部类的<<操作符

  21. 21

    编译代码时出错 | 操作符在模板定义下重载,使用 VS2017 Update8.2

  22. 22

    RecognizeWithUIAsync无法使用等待操作符

  23. 23

    使用 NSPredicate 的 `array[FIRST]` 操作符

  24. 24

    在Pandas数据框.loc中使用Python的in操作符

  25. 25

    使用NumPy函数进行元素操作比操作符更快吗?

  26. 26

    C ++成员访问/间接操作符对等

  27. 27

    C ++获取没有操作符的变量地址

  28. 28

    具有操作符的C ++ const指针[]

  29. 29

    模板中的<操作符重载

热门标签

归档