注册 登录
编程论坛 C++教室

关于“<<”和“>>”的重载

死亡骑士rq 发布于 2012-06-28 14:56, 578 次点击
在C++运算符重载中,流插入和流提取运算符为什么只能定义为友元函数或普通函数,而不能定义为成员函数?
求详解。谢谢。
7 回复
#2
lonmaor2012-06-28 15:32
定义为成员函数的话,你如何返回一个stream&来实现形如cin>>a>>b的调用
操作符<<的编译器解释似乎是这个样子的,在C大学教程这本书的重载运算符部分有介绍。
operator<<(stream&,int a);
#3
死亡骑士rq2012-06-28 21:37
基础不好,我还是不甚明白。求指点啊,详解。
谢谢。
#4
lonmaor2012-06-28 21:42
你可以定义来试试,看看行得通不。1.如何调用。2.如何定义返回值。
#5
pangding2012-06-28 22:54
回复 3楼 死亡骑士rq
主要是和成员函数的语法有关。

重载二元运算符为成员函数时,比如加法:如果有 a.operator+(b) 的话,就可以用 a + b 这种方法表达。这和人们期望的一致。
如果你重载 operator<< 的话,也可以用 a << cout 的方法来表达,但这种方式很别扭。而且也无法像 cout << a << b 这样链式调用了。
所以如果你希望 cout << a 这种表达成立,你就需要额外的函数,并且可能需要访问 a 的内部数据。所以 << 一般都会定义成友元函数。
>> 也是一个道理。
#6
pangding2012-06-28 23:02
楼主也可以参考下面这个帖子里我对成员函数和非成员函数的解释:
https://bbs.bccn.net/viewthread.php?tid=371709
#7
死亡骑士rq2012-06-29 22:43
回复 6楼 pangding
谢谢版主!
#8
死亡骑士rq2012-06-29 22:43
回复 4楼 lonmaor
好的,谢谢!
1