| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 573 人关注过本帖, 1 人收藏
标题:关于“<<”和“>>”的重载
只看楼主 加入收藏
死亡骑士rq
Rank: 2
来 自:四川
等 级:论坛游民
帖 子:21
专家分:15
注 册:2012-6-19
结帖率:100%
收藏(1)
 问题点数:0 回复次数:7 
关于“<<”和“>>”的重载
在C++运算符重载中,流插入和流提取运算符为什么只能定义为友元函数或普通函数,而不能定义为成员函数?
求详解。谢谢。
2012-06-28 14:56
lonmaor
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:郑州
等 级:版主
威 望:75
帖 子:2637
专家分:6423
注 册:2007-11-27
收藏
得分:0 
定义为成员函数的话,你如何返回一个stream&来实现形如cin>>a>>b的调用
操作符<<的编译器解释似乎是这个样子的,在C大学教程这本书的重载运算符部分有介绍。
operator<<(stream&,int a);

从不知道到知道,到知道自己不知道,成长的道路上脚步深深浅浅
2012-06-28 15:32
死亡骑士rq
Rank: 2
来 自:四川
等 级:论坛游民
帖 子:21
专家分:15
注 册:2012-6-19
收藏
得分:0 
基础不好,我还是不甚明白。求指点啊,详解。
谢谢。

世间本无真实/
只有谎言/
迫使我们设法穿越
2012-06-28 21:37
lonmaor
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:郑州
等 级:版主
威 望:75
帖 子:2637
专家分:6423
注 册:2007-11-27
收藏
得分:0 
你可以定义来试试,看看行得通不。1.如何调用。2.如何定义返回值。

从不知道到知道,到知道自己不知道,成长的道路上脚步深深浅浅
2012-06-28 21:42
pangding
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:北京
等 级:贵宾
威 望:94
帖 子:6784
专家分:16751
注 册:2008-12-20
收藏
得分:0 
回复 3楼 死亡骑士rq
主要是和成员函数的语法有关。

重载二元运算符为成员函数时,比如加法:如果有 a.operator+(b) 的话,就可以用 a + b 这种方法表达。这和人们期望的一致。
如果你重载 operator<< 的话,也可以用 a << cout 的方法来表达,但这种方式很别扭。而且也无法像 cout << a << b 这样链式调用了。
所以如果你希望 cout << a 这种表达成立,你就需要额外的函数,并且可能需要访问 a 的内部数据。所以 << 一般都会定义成友元函数。
>> 也是一个道理。
2012-06-28 22:54
pangding
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:北京
等 级:贵宾
威 望:94
帖 子:6784
专家分:16751
注 册:2008-12-20
收藏
得分:0 
楼主也可以参考下面这个帖子里我对成员函数和非成员函数的解释:
https://bbs.bccn.net/viewthread.php?tid=371709
2012-06-28 23:02
死亡骑士rq
Rank: 2
来 自:四川
等 级:论坛游民
帖 子:21
专家分:15
注 册:2012-6-19
收藏
得分:0 
回复 6楼 pangding
谢谢版主!

世间本无真实/
只有谎言/
迫使我们设法穿越
2012-06-29 22:43
死亡骑士rq
Rank: 2
来 自:四川
等 级:论坛游民
帖 子:21
专家分:15
注 册:2012-6-19
收藏
得分:0 
回复 4楼 lonmaor
好的,谢谢!

世间本无真实/
只有谎言/
迫使我们设法穿越
2012-06-29 22:43
快速回复:关于“<<”和“>>”的重载
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.014739 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved