C++输入输出运算符的重载

C++中的流插入运算符“>>”和流输出运算符“<<”在C++类库中提供的,所有的C++编译系统都会在提供输入流istream和输出流ostream,cin、cout是分别是istream类和ostream类的对象,在类库的头文件中已经对“<<”、“>>”运算符进行了重载,那么具体是怎么实现的?

输入运算符重载

istream& operator>>(istream& in, A& a)
{
    in>>"输入的内容1">>"输入的内容2"...;
    return in;
}

C++中输入运算符的重载第一个参数是输入流对象的引用,第二个参数是需要输入的类对象的引用,我们一般将第二个参数定义为非const类型,否则无法赋值,返回值是输入流istream&。

输出运算符重载

ostream& operator<<(ostream& out,const A& a)
{
    out<<"输出内容1"<<"输出内容1"...;
    return out;
}

C++中输出运算符重载的第一个参数是输出流对象的引用,第二个参数是需要输出的类对象的引用,我们一般将第二个参数定义为const类型,因为输出时不需要改变对象的,返回值是输出流ostream&。

为什么将输入输出运算符定义为friend函数?

共同点就是将输入运算符重载函数和输出运算符重载函数都声明为友元类,为什么这样设计呢?

友元函数

我们知道友元函数是可以被任意的类调用,实现类共享,减少不必要的系统开销,提高效率,使得其他类可以访问该类的私有变量。但也有缺点,就是破坏了类的封装性,一般情况下不建议使用。

友元函数的使用场景

  • 在输入输出运算符重载
  • 当两个类需要共享数据

原因

在这里定义为友元函数,因为友元函数中不包含this指针,我们要求第一个参数一定是输入输出流的引用,否则代码就会变成 a << cout ,不满足我们的习惯。
我们每个对象都可能会用到输入输出,所以定义为友元函数,使得我们的函数可以备任意类调用。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值