浅谈C++类(8)--重载输入输出操作符

欢迎转载,但请标明作者 “九天雁翎”,当然,你给出这个帖子的链接更好。

其实我们已经用过操作符重载,还记得<<和>>吗?本来不是移位操作符吗?在C++里面我们已经把他们当作输入输出操作符用过了,我们今天来研究一下重载他们用来输入输出类,先还是用水果来举一个例子。

例8.0:

#include <string>
#include <iostream>
using namespace std;
class Fruit //定义一个类,名字叫Fruit
{
string name; //定义一个name成员
string colour; //定义一个colour成员
public:
friend istream& operator>>(istream&,Fruit&); //必须要声明为友元啊,不然怎么输入啊
friend ostream& operator<<(ostream&,const Fruit&); //同理
void print() //定义一个输出名字的成员print()
{
cout<<colour<<" "<<name<<endl;
}
Fruit(const string &nst = "apple",const string &cst = "green"):name(nst),colour(cst)
{
} //构造函数
~Fruit()
{
}
};
ostream& operator<<(ostream &out,const Fruit &s)//我是输出操作符的重载
{
out<<s.colour<<" "<<s.name;
return out;
}
istream& operator>>(istream& in,Fruit &s) //我是输入操作符的重载
{
in>>s.colour>>s.name;
if(!in)
cerr<<"Wrong input!"<<endl;
return in;
}
int main()
{
Fruit apple;
cin >>apple;
cout<<apple;

return 0;
}

对照着例子开始说明一下,重载这个词以前是用在函数上面的,而实际上C++中好像也把操作符看作一种特殊的函数,特殊的方面仅仅是在函数名是操作符而已,其他和函数没有什么区别,当作函数来对待就好了,函数无非就是 返回值 函数名(参数)的形式,重载操作符的时候也是这样,为了方便说明是操作数作函数名,这里用的是operator后接操作符的形式,如本例中说明的是输入输出操作符,就是operator<<,operator>>,这样,这个例子也许你还看不出用重载输入输出有什么好,我很久前就定义了一个print()成员函数,以前不是都很好的完成了输出任务吗?而用构造函数也可以很好的完成输入了。当然说是这样说,但是操作符的特点是简单明了,而C/C++追求的就是简洁,当年C程序为了简洁甚至让一切东西默认int呢,要得就是简洁。比如,当大量的输出需要处理的时候,我们用函数就要这样,apple1.print();apple2.print();apple3.print()......................但是用操作符的话就可以这样,cout<<apple1<<apple2<<apple3;哪个简洁自然非常明了。所以虽然我们不用操作符好像也可以完成任务,不过我们还是偏向于使用重载操作符的方式,比如plus(a,b)我们自然愿意用a+b,我们还用"!"来取代empty()用"=="来取代equal(),用"+="取代a=plus(a,b),等等等等。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值