cppchap5 第五章 算符重载与入 出流操作

cppchap5 第五章 算符重载与入 出流操作

ID:1479717

大小:153.50 KB

页数:17页

时间:2017-11-11

cppchap5 第五章 算符重载与入 出流操作_第1页
cppchap5 第五章 算符重载与入 出流操作_第2页
cppchap5 第五章 算符重载与入 出流操作_第3页
cppchap5 第五章 算符重载与入 出流操作_第4页
cppchap5 第五章 算符重载与入 出流操作_第5页
资源描述:

《cppchap5 第五章 算符重载与入 出流操作》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、第五章算符重载与入/出流操作http://read.pudn.com/downloads67/ebook/241634/cppchap5.doc在前一章的例27中,当实现复型数c=a+b的运算时是利用类的成员函数进行的。在实用中所期望的是直接利用上式的运算表达式而求解。本章将讨论的算符重载便是解决此类需求的一种技术手段。另一方面本章还将讲述在C++语言中如何使用标准流入/出(cin>>和cout<<)算符并配以格式说明的方法。所有这些也都是C++语言利用它特有的流式类的基本手段为用户提供的便捷的入/出手段。§1C++语言的运算符重载(Operato

2、rOverloading)其实算符重载并非在C++语言中才有,C中的“*”号就是一种重载算符。比如:inti=20,*p;p=&i;i=*p*2;等表达式中的星号随其位置的不同而引起的操作也不同,这也可以被认为是一种重载。§1.1C++语言类中的算符重载第三章已经讨论了C++语言函数的重载的概念。在C++语言中,大多数的运算符号也可以当作函数名的一部分来使用,这就奠定了算符重载的基础。声明算符重载的格式是:operatorC++语言支持的算符(参数描述表){…}将前一章最后例27中的类成员函数add(…)和sub(…)分别改写为算符函数后可呈例1的

3、形式:例1:#includeclassComplex{doubler,i;public:Complex(doublers=0.,doubleis=0.){r=rs;i=is;};Complexoperator+(constComplex&add_2){returnComplex(r+add_2.r,i+add_2.i);}Complexoperator-(constComplex&sub_2){returnComplex(r-sub_2.r,i-sub_2.i);}voidoperator!();};voidComplex::op

4、erator!(){if(i>=0)printf(“%.2f+%.2fi”,r,i);elseprintf(“%.2f%.2fi”,r,i);}voidmain(){Complexa(3.,9.),b(7.,8.),c(0.,0.);c=a.operator+(b);//当执行完此表达式后将执行析构函数printf(“a+b=”);!c;c=b.operator-(a);printf(“b-a=”);!c;}本例分别作了一元算符‘!’和二元算符‘+’、‘-’的函数重载。例中一元算符‘!’已按它原有的形式(也必须用原有的形式)写在操作对象左面

5、。而二元算符都有意按“operator+”做为函数名写在其对象和参量之间。在对算符函数引用时,C++语言规定作为声明重载算符前的关键字“.operator”可以被省略,其后的“()”也可以被省略。括号内的参数则可直接写在算符之后。这样上例main()函数内的两个引用就可以分别改写成非常简单、熟悉的形式了:c=a+b;c=b-a;可见算符重载使程序的书写大为简化了。上例的运算甚至可以连算,例如写出:“c=a+b+a;”的形式来,若仍用例中函数的写法,此句将十分冗长且不易读懂。使用算符重载和原算符的关系式时必须注意以下几点:①算符的分类与算符的限制须再

6、强调,算符重载是重复利用C++99语言的原有算符,并非取消相应算符的原有功能(以运算对象类型区分其功能)。为避免发生二义性,算符重载并不是对全部C++语言所支持的所有算符都通用。下面几种算符就不允许重载:“sizeof、.、*、::、?、:>”。而“=、()、[]、->”四种算符只能作为类中的成员函数才能被重载。此外不能利用算符重载创造新算符。②重载后的算符语义不能发生本质的改变由上例可见,算符重载普遍适用于一、二元算符,而且被重载的算符仍保留原有的特性以及原有的优先顺序(如先乘除后加减,先右后左等)。如在引用算符重载函数的省略形式时,“!”必须出

7、现在被操作对象的左侧;参数应将移至“[]”内等。例2:#include#includeclassStudent{charname[10];floatscore[3];staticunsignedintsum;public:voidoperator[](constStudent&);Student(char*na,floatma=0.,floaten=0.,floatph=0.){score[0]=ma;scord[1]=en;score[2]=ph;strcpy(name,na);}voidoperato

8、r!(){if(sum>0)cout<<”Mat:”<

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。