C++运算符重载之输入输出运算符的重载
系统对于自定义类型的输入输出,采用重载后的运算符 << >>来实现。
1、重载插入运算符(也称输出运算符) <<
一般格式:
ostream & operator <<(ostream &out,自定义类型名 &形参名)
{
out<<.....;
return out;
}
2、重载提取运算符(也称输入运算符) >>
一般格式:但是返回类型不一定为这个类型。
istream & operator >>(istream &in,自定义类型名 &形参名)
{
in>>...
return in;
}
注:因为第一个参数是流对象,所以不能声明为其它类的成员函数,只能声明为友元
函数或普通函数。如果声明为该类的成员函数,那么第一个参数就不是流对象,而
是当前类的对象。
测试程序:
#include <iostream>
using namespace std;
class CComplex
{
private:
double real;
double imag;
public:
CComplex(double r,double i):real(r),imag(i)
{
}
~CComplex()
{
}
//使用友元函数重载输入 输出运算符
//这段代码也正确,返回类型不一定要是 ostream
// friend void operator <<(ostream &out,CComplex &com)
// {
// out<<"real="<<com.real<<",imag="<<com.imag<<endl;
// }
friend ostream & operator <<(ostream &out,CComplex &com)
{
out<<"real="<<com.real<<",imag="<<com.imag<<endl;
return out;
}
friend istream & operator >>(istream &in,CComplex &com)
{
cout<<"请输入实部(回车结束):"<<endl;
in>>com.real;
cout<<"请输入虚部(回车结束):"<<endl;
in>>com.imag;
return in;
}
};
int main()
{
CComplex com1(10,20);
cin>>com1;
cout<<com1;
return 0;
}
程序结果:
请输入实部(回车结束):
20
请输入虚部(回车结束):
50
real=20,imag=50