C++语言程序设计

下面是iostream.h中istream类的部分定义。

| 程序12-6

/*
* Formatted extraction operations
*/
istream _FAR & _Cdecl operator>> (istream _FAR & (_Cdecl *_f)(istream _FAR &));
istream _FAR & _Cdecl operator>> (ios _FAR & (_Cdecl *_f)(ios _FAR &) );
istream _FAR & _Cdecl operator>> ( signed char _FAR *);
istream _FAR & _Cdecl operator>> (unsigned char _FAR *);
istream _FAR & _Cdecl operator>> (unsigned char _FAR &);
istream _FAR & _Cdecl operator>> ( signed char _FAR &);
istream _FAR & _Cdecl operator>> (short _FAR &);
istream _FAR & _Cdecl operator>> (int _FAR &);
istream _FAR & _Cdecl operator>> (long _FAR &);
istream _FAR & _Cdecl operator>> (unsigned short _FAR &);
istream _FAR & _Cdecl operator>> (unsigned int _FAR &);
istream _FAR & _Cdecl operator>> (unsigned long _FAR &);
istream _FAR & _Cdecl operator>> (float _FAR &);
istream _FAR & _Cdecl operator>> (double _FAR &);
istream _FAR & _Cdecl operator>> (long double _FAR &);

// extract from this istream, insert into streambuf
istream _FAR & _Cdecl operator>> (streambuf _FAR *);

从上面运算符重载的定义可以看到：>>运算符返回的数据类型是istream，这样我们就可以很好的解释类似cin>>a>>b>>c>>d写法。cin>>a>>b>>c>>d可以写成（（（cin>>a）>>b）>>c）>>d，程序先执行cin>>a，返回的是istream参数，传给第二个>>运算符，依此类推，实际上是前一个函数的返回值作为后一个函数的参数，类似f1(a,f2(b,f3(c,f4(d))))。插入运算符<<也可以有与抽取运算符>>类似的用法，例如：cout<<a<<b<<c<<d;原因就不再赘述了。