C++:流插入、流提取操作符

流插入和流提取操作符是两个我们常用的操作符。对于内置类型我们可以很方便的使用,不过对于自定义类型,要想这两个操作符的结果符合我们的预期,则需要我们自己根据自定义类型来重载这两个操作符。

1.流插入操作符:

我们根据标准库里的实现来,可以知道返回值和参数都是一样的ostream的对象

//假设我们已经实现了date类
class date
{
 public:
    operator <<(ostream& out)
    {
        out<<_year<<"/"<<_month<<"/"<<_day;
    }
};

不过我们这样实现了依旧调不动

date d1;
cout<<d1;

因为顺序有问题,我们实现的是成员函数,它的第一个操作数默认是this指针,所以需要调换一下使用顺序,不过感觉挺不方便的。

date d1;
d1<<cout;

因为不符合我们的使用逻辑。所以,下一步需要把使用顺序调换过来,那样就不能使用成员函数了,只能定义成公有函数,但是我们仍然需要使用成员变量,于是我们需要用到一个关键字——friend。

//假设我们已经实现了date类
class date
{
    friend ostream& operator <<(ostream& out,date d1);
 public:
    
};
ostream& operator <<(ostream& out,date d1)
    {
        out<<_year<<"/"<<_month<<"/"<<_day;
    }

这个就是友元声明,友元声明之后,外部的函数或者类就可以访问类里面的所有成员了。关于友元,在该专栏的另一篇文章有更详细的介绍。C++:友元-CSDN博客

注意,函数的返回值也得是ostream的对象,否则

date d1,d2;
cout<<d1<<d2;

以上的情况就无法应对。

同时流插入需要注意是否需要const版本。

2.流提取:

与流插入相似,不过没有const版本。

流插入和流提取都是以空格作为分隔

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值