C++重载流插入运算符和流提取运算符
时间:2014-11-05 19:41 点击:次
C++的流插入运算符“<<”和流提取运算符“>>”是C++在类库中提供的,所有C++编译系统都在类库中提供输入流类 istream和输出流类ostream。cin和cout分别是istream类和ostream类的对象。在类库提供的头文件中已经对 “<<”和“>>”进行了重载,使之作为流插入运算符和流提取运算符,能用来输出和输入C++标准类型的数据。因此,凡是用 “cout<<”和“cin>>”对标准类型数据进行输入输出的,都要用#include 把头文件包含到本程序文件中。
用户自己定义的类型的数据,是不能直接用“<<”和“>>”来输出和输入的。如果想用它们输出和输入自己声明的类型的数据,必须对它们重载。
对“<<”和“>>”重载的函数形式如下:
istream & operator >> (istream &, 自定义类 &);
ostream & operator << (ostream &, 自定义类 &);
即重载运算符“>>”的函数的第一个参数和函数的类型都必须是istream&类型,第二个参数是要进行输入操作的类。重载 “<<”的函数的第一个参数和函数的类型都必须是ostream&类型,第二个参数是要进行输出操作的类。因此,只能将重载 “>>”和“<<”的函数作为友元函数或普通的函数,而不能将它们定义为成员函数。
重载流插入运算符“<<”
在程序中,人们希望能用插入运算符“<<”来输出用户自己声明的类的对象的信息,这就需要重载流插入运算符“<<”。[例10.7] 在例10.2的基础上,用重载的“<<”输出复数。
- #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;
- return output;
- }
- int main( )
- {
- Complex c1(2,4),c2(6,10),c3;
- c3=c1+c2;
- cout<<c3;
- return 0;
- }
重载流提取运算符“>>”
C++预定义的运算符“>>”的作用是从一个输入流中提取数据,如“cin>>i;”表示从输入流中提取一个整数赋给变量i(假设已定义i为int型)。重载流提取运算符的目的是希望将“>>”用于输入自定义类型的对象的信息。 [例10.8] 在例10.7的基础上,增加重载流提取运算符“>>”,用“cin>>”输入复数,用“cout<<”输出复数。- #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)";
- return output;
- }
- istream& operator >> (istream& input,Complex& c) //定义重载运算符“>>”
- {
- cout<<"input real part and imaginary part of complex number:";
- input>>c.real>>c.imag;
- return input;
- }
- int main( )
- {
- Complex c1,c2;
- cin>>c1>>c2;
- cout<<"c1="<<c1<<endl;
- cout<<"c2="<<c2<<endl;
- return 0;
- }
- ostream& operator << (ostream& output,Complex& c)
- {
- output<<"("<<c.real;
- if(c.imag>=0) output<<"+";//虚部为正数时,在虚部前加“+”号
- output<<c.imag<<"i)"<<endl; //虚部为负数时,在虚部前不加“+”号
- return output;
- }
顶一下
(0)
0%
踩一下
(0)
0%
上一篇:C++双目运算符重载
相关内容:
最新内容
热点内容
- QQ群
-
微信
- 返回首页
- 返回顶部