C++的流插入运算符“<<”和流提取运算符“>>”是C++在类库中提供的,所有C++编译系统都在类库中提供输入流类istream和输出流类ostream。cin和cout分别是istream类和ostream类的对象。在类库提供的头文件中已经对“<<”和“>>”进行了重载,使之作为流插入运算符和流提取运算符,能用来输出和输入C++标准类型的数据。因此,凡是用“cout<<”和“cin>>”对标准类型数据进行输入输出的,都要有iostream头文件。
如果用户自己定义的类型,是不能直接用“<<”和“>>”来输出和输入的。如果想用它们输出和输入自己声明的类型的数据,要对它们重载。
对“<<”和“>>”重载如下:
istream & operator >> (istream &, 自定义类 &);
ostream & operator << (ostream &, 自定义类 &);
DEV运行结果为:
如果用户自己定义的类型,是不能直接用“<<”和“>>”来输出和输入的。如果想用它们输出和输入自己声明的类型的数据,要对它们重载。
对“<<”和“>>”重载如下:
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 也一样。