14.7.2 抽取符的重载

    同插入符一样,可以针对自定义类型重载抽取符>>,同样有以下3个要求。

    ❑以友元函数形式进行。

    ❑第一个参数是istream类的引用,第二个参数是自定义类型的引用。

    ❑返回istream类的引用以实现链式抽取,即拼接抽取。

    仍以代码14.25中定义的Complex类为例,为其重载抽取符,见代码14.26。

    代码14.26 重载>>操作符OperatorOverload2


    <———————————文件名:example1426.cpp————————————————> 01 #include<iostream> 02 using namespace std; 03 class Complex 04 { 05 private: 06 double imag;//虚部 07 double real;//实部 08 public: 09 Complex(double r=0. 0,double i=0.0)//构造函数 10 { 11 real=r; 12 imag=i; 13 } 14 friend ostream&operator<<(ostream&,Complex&);//友元函数声明 15 friend istream&operator>>(istream&,Complex&); 16 }; 17 ostream&operator<<(ostream&os,Complex&C1)//对操作符<<的重载 18 { 19 os<<C1. real<<"+i*"<<C1.imag<<endl; 20 return os; 21 } 22 istream&operator>>(istream&is,Complex&C1)//对操作符>>的重载 23 { 24 is>>C1. real; 25 while(is. get()!='*') 26 { 27 } 28 cin>>C1. imag; 29 return is; 30 } 31 int main() 32 { 33 Complex c1(2. 5,3.1); 34 cin>>c1; 35 cout<<c1; 36 return 0; 37 }

    输出结果如下所示。


    4.5+i*5.6(用户输入) 4.5+i*5.6

    【代码解析】代码第22行,通过对Complex重载了操作符>>,使得可以从用户输入的“4.5+i*5.6”格式串中提炼出实部和虚部,大大提高了程序的可读性和友好性。