鱼C论坛

 找回密码
 立即注册
查看: 4105|回复: 5

初学c++,看书遇到一个疑问,希望鱼油帮帮忙

[复制链接]
发表于 2012-9-28 21:06:18 | 显示全部楼层 |阅读模式
5鱼币
在学到重载流插入运算符<<

  1. #include<iostream>
  2. #include<stdlib.h>
  3. using namespace std;
  4. class Complex
  5. {
  6. public:
  7. Complex( double r = 0, double i = 0) : real(r), imag(i){}     //构造函数初始化
  8. Complex operator + ( Complex &c2 );            //复数相加函数声明
  9. friend ostream & operator << ( ostream&, Complex&);           // 运算符重载 ,我说的就是这一句
  10. private:
  11. double real;
  12. double imag;
  13. };
  14. Complex Complex::operator + ( Complex &c2 )
  15. {
  16. return Complex( real + c2.real , imag + c2.imag );
  17. }
  18. ostream & operator << ( ostream &output, Complex &c )      //还有这一句,把第一个&去掉的话
  19. {
  20. output << "(" << c.real << "+" << c.imag  << "i)" << endl;
  21. return output;
  22. }
  23. int main()
  24. {
  25. Complex c1( 1, 3), c2( 4, 7 ), c3;
  26. c3 = c1 + c2;
  27. cout << c3;
  28. system( "pause");
  29. return 0;
  30. }
复制代码
这个程序是对的
我的想法是  既然 cout 是  ostream 类的对象,那为什么不能把 ostream & operator << ( ostream &output, Complex &c )
这一句  ostream & operator << 的 & 给去掉,我觉得把 & 去掉的话返回output 正好是ostream类型,不是正好吗?
为什么去掉 & 会出错呢



最佳答案

查看完整内容

出于某种原因,ostream和istream类型的对象都能不能被复制。去掉&的话在函数参数值传递过程中将复制ostream对象,从而导致错误。 关于ostream和istream类型的对象都能不能被复制,主要是为了它们设计的简单而规定的。
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2012-9-28 21:06:19 | 显示全部楼层
出于某种原因,ostream和istream类型的对象都能不能被复制。去掉&的话在函数参数值传递过程中将复制ostream对象,从而导致错误。

关于ostream和istream类型的对象都能不能被复制,主要是为了它们设计的简单而规定的。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2012-9-28 21:48:17 | 显示全部楼层
我记得effective C++上有介绍,&可以去掉的,而且可以编译通过,对于操作符返回引用的目的是 为了实现连续赋值 比如x=y=z=5类似这样的
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2012-9-28 21:57:58 | 显示全部楼层

我用dev和vc6都编译都通不过,我认为去掉了&,也可以连续赋值啊,它还是可以通过return返回呀,我有点想不通
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2012-9-28 23:06:18 | 显示全部楼层
友来友网 发表于 2012-9-28 21:57
我用dev和vc6都编译都通不过,我认为去掉了&,也可以连续赋值啊,它还是可以通过return返回呀,我有点想不 ...

http://blog.chinaunix.net/uid-24876683-id-206802.html  自己看吧!

评分

参与人数 1鱼币 +1 收起 理由
友来友网 + 1 赞一个!

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2012-9-29 08:31:45 | 显示全部楼层
支持3楼的回答。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-11-15 08:27

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表