- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第7章 运算符重载 运算符重载是面向对象程序设计的重要特征。运算符重载是对已有的运算符赋予多重含义,使同一个运算符作用于不同类型的数据导致不同的行为。C++中经重载后的运算符能直接对用户自定义的数据进行操作运算,这就是C++语言中的运算符重载所提供的功能。 7.1运算符重载概述 7.1.1 运算符重载的好处 int sum_i; float sum_f; int i1=123, i2=456; float f1=3.45, f2=56.78; sum_i= i1+i2; couti1+i2 = sum_i; sum_f= f1+f2; coutf1+f2 = sum_f; sum_f= i1+i2+f1; couti1+i2+f1 =sum_f; 7.1.2运算符重载的规则 (1)运算符重载是针对新类型数据的需要,对原有运算符进行适当的改造完成的。一般来讲,重载的功能应当与原有的功能相类似。 (2)只能重载原先已有定义的运算符。程序员不能臆造新的运算符来扩充C++语言。 (3)下列5个运算符不能重载:.、*、::、sizeof、?: (4)不能改变运算符的操作数个数。 (5)不能改变运算符原有的优先级。 (6)不能改变运算符原有的结合性。 (7)不能改变运算符对预定义类型数据的操作方式。 7.2 运算符重载函数的两种形式 7.2.1 友元运算符函数 在C++中,可以把运算符重载函数定义成某个类的友元函数,称为友元运算符函数。 1. 友元运算符函数定义的语法形式 友元运算符函数的原型在类的内部声明格式如下: class X { //… friend 返回类型 operator运算符(形参表); //… } 在类外定义友元运算符函数的格式如下: 返回类型 operator运算符(形参表) { 函数体 } 2. 双目运算符重载 当用友元函数重载双目运算符时,两个操作数都要传递给运算符函数。 例7.2 用友元运算符函数进行复数运算。 A3=A1+A2; A4=A1-A2; A5=A1*A3; A6=A1/A4; 执行这4条语句时,C++将其解释为: A3=operator +(A1,A2); A4=operator -(A1,A2); A5=operator *(A1,A2); A6=operator /(A1,A2); 一般而言,如果在类X中采用友元函数重载双目运算符@,而aa和bb是类X的两个对象,则以下两种函数调用方法是等价的: aa @ bb; // 隐式调用 operator @(aa,bb); // 显式调用 有时,在函数返回的时候,可以直接调用类的构造函数来生成一个临时对象,例如: complex operator +(complex a,complex b) { return complex(a.real+b.real, a.imag+b.imag); } 其中语句: return complex(a.real+b.real, a.imag+b.imag); 创建一个临时对象并返回它。 3. 单目运算符重载 用友元函数重载单目运算符时,需要一个显式的操作数。 例7.3 用友元函数重载单目运算符“-”。 一般而言,如果在类X中采用友元函数重载单目运算符@,而aa是类X的对象,则以下两种函数调用方法是等价的: @aa; // 隐式调用 operator@(aa); // 显式调用 说 明 (1)运算符重载函数operator@()可以返回任何类型,甚至可以是void类型,但通常返回类型与它操作的类型相同,这样可以使重载运算符用在复杂的表达式中。 (2)在重载运算符时,运算符函数所作的操作不一定要保持c++中该运算符原有的含义。 (3)在c++中,用户不能定义新的运算符,只能从C++已有的运算符中选择一个恰当运算符重载。 (4)C++编译器根据参数的个数和类型来决定调用哪个重载函数。因此,可以为同一个运算符定义几个运算符重载函数来进行不同的操作。 (5)不能用友元函数重载的运算符时:=,(),[],- (6)由于单目运算符“-”可不改变操作数自身的值,所以在7.3中重载“-”的友元函数的原型可以写成: friend AB operator-(AB obj); 通过传值的方式传递参数。 7.2.2 成员运算符函数 在C
文档评论(0)