c++插入运算符和输出运算符的重载

本文详细介绍了C++中流插入运算符<<和流提取运算符>>的使用方法,包括如何对自定义类型进行重载以实现输入输出功能。通过示例代码演示了如何实现自定义类的流操作符重载,以及重载函数中的return output的作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

C++的流插入运算符“<<”和流提取运算符“>>”是C++在类库中提供的,所有C++编译系统都在类库中提供输入流类istream和输出流类ostream。cin和cout分别是istream类和ostream类的对象。在类库提供的头文件中已经对“<<”和“>>”进行了重载,使之作为流插入运算符和流提取运算符,能用来输出和输入C++标准类型的数据。因此,凡是用“cout<<”和“cin>>”对标准类型数据进行输入输出的,都要有iostream头文件

如果用户自己定义的类型,是不能直接用“<<”和“>>”来输出和输入的。如果想用它们输出和输入自己声明的类型的数据,要对它们重载。

对“<<”和“>>”重载如下:
    istream & operator >> (istream &, 自定义类 &);
    ostream & operator << (ostream &, 自定义类 &);

重载运算符“>>”的函数的第一个参数和函数的类必须是istream&类型,第二个参数是要进行输入的类。重载“<<”的函数的第一个参数和函数的类必须是ostream&类型,第二个参数是要进行输出操作的类。因此,只能将重载“>>”和“<<”的函数作为友元函数或普通的函数,而不能将它们定义为成员函数。

重载流插入运算符“<<”

<span style="font-family:SimHei;font-size:14px;"></span><pre name="code" class="cpp"><span style="font-family:SimHei;font-size:14px;">#include <iostream>
using namespace std;
class Complex
{
   public:
   Complex( ){real=0;imag=0;}
   Complex(double r,double i){real=r;imag=i;}
   Complex operator + (Complex &c2);  //“+”重载为成员函数
   friend ostream& operator << (ostream&,Complex&);  //“<<”重载为友元函数
   private:
   double real;
   double imag;
};
Complex Complex::operator + (Complex &c2)//定义“+”重载
{
   return Complex(real+c2.real,imag+c2.imag);
}
ostream& operator << (ostream& output,Complex& c) //定义“<<”重载
{
   output<<"("<<c.real<<"+"<<c.imag<<"i)"<<endl;
  <strong> <u>return output;</u></strong>
}
int main( )
{
   Complex c1(1,2),c2(3,4),c3;
   c3=c1+c2;
   cout<<c3;
   return 0;
}</span>


DEV运行结果为:

重载流提取运算符“>>”

#include <iostream>
using namespace std;
class Complex
{
   public:
   friend ostream& operator << (ostream&,Complex&); //声明重载“<<”
   friend istream& operator >> (istream&,Complex&); //声明重载“>>”
   private:
   double real;
   double imag;
};
ostream& operator << (ostream& output,Complex& c) //定义重载“<<”
{
   output<<"("<<c.real<<"+"<<c.imag<<"i)";
  <u> <strong>return output;</strong></u>
}
istream& operator >> (istream& input,Complex& c)  //定义重载“>>”
{
   cout<<"input real , imag :";
   input>>c.real>>c.imag;
<strong>   <u>return input;</u></strong>
}
int main( )
{
   Complex c1,c2;
   cin>>c1>>c2;
   cout<<"c1="<<c1<<endl;
   cout<<"c2="<<c2<<endl;
   return 0;
}
运行为:


在重载函数<<和>>时都有 return output和return input。

return  output的作用是什么?

是能连续向输出流插入信息。output是ostream类的对象,它是实参cout的引用,也就是cout通过传送地址给output,使它们二者共享同一段存储单元,或者说output是cout的别名。因此,return output就是return cout,将输出流cout的现状返回,即保留输出流的现状。同上,return input 也一样。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值