第八讲 运算符载.pptVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第八讲 运算符载

* * * * 运算符重载概述 重载单目运算符 重载双目运算符 重载赋值运算符 运算符重载——是对已有运算符赋予多重含义,同一个运算符用于不同类型的数据将导致不同类型的行为。 注意:运算符重载实质上就是函数重载。在实现过程中,首先把指定的运算符表达式转化成对运算符函数的调用,运算对象转化成运算符函数的实参,然后根据实参的类型来确定需要调用的函数,这个过程是在编译过程中完成的。 delete New () [] - , * -- ++ || = = != == = = |= = ^= %= /= *= -= += = ! ~ | ^ % / * - + ?: sizeof :: .* . C++中的运算符除了少数几个之外,全部可以重载,而且只能重载已有的这些运算符 重载之后,运算符的优先级和结合性都不会改变 运算符重载是针对新类型数据的实际需要,对原有运算符进行的适当改造。一般来讲,重载的功能应当与原有功能相类似,不能改变原运算符的操作对象个数,同时至少要有一个操作对象是自定义类型。 注意:与使用明确的函数调用相比,如果完成相同的操作运算符重载可以使程序更清晰,则使用运算符重载。但要避免运算符重载过度使用或者使用不一致,这将导致称故函数模糊和可读性差。 运算符重载形式有两种: 重载为类的成员函数 重载为类的友元函数 格式1:使运算符函数重载为类的成员函数 函数类型 operator 运算符(形参表) { 函数体;} 格式2:使运算符函数重载为类的友元函数 friend operator 运算符(形参表) { 函数体;} 注意:当运算符重载为类的成员函数时,函数的参数个数比原来的运算符个数要少一个(后缀++/--除外);当重载为类的友元函数时,参数个数与原运算符的个数相同 一般而言,单目运算符最好重载为成员函数,而双目运算符最好重载为友元函数 C++中单目运算符只有“++”和“--” 例1 分析以下程序的执行结果 #include iostream using namespace std; class Sample { int n; public: Sample(int i) { n=i; } void operator ++() { n++;} //”++”运算符重载 void display() {coutn=nendl; } }; int main() { Sample A(5); A++; A.display(); return 0; } A++; ++A; “++”和“--”重载运算符也有前缀和后缀两种运算符重载形式。其语法格式如下: 函数类型 operator ++(); //前缀运算 函数类型 operator ++(int); //后缀运算 使用前缀运算符的语法格式如下:++对象; 使用后缀运算符的语法格式如下:对象++; 注意:当重载单目运算符时,最好采用格式1进行定义,也就是将运算符函数作为类的成员函数,因为friend函数违反了类的封装。 #include iostream #include cstdlib using namespace std; class Calculator { unsigned int value; public: Calculator(){value=0;} void operator ++(); //重载自增运算符 void operator --(); //重载自减运算符 unsigned int operator()()const; //重载括号运算符 }; void Calculator::operator ++() { if(value65535) ++value; else //溢出处理 { cout\nData overflow!endl; abort();//退出程序 } } void Calculator::operator --() { if(value0) --value; else { cout\nData overflow!endl; abort(); } } unsigned int Calculator::operator ()()const { return value; } int main() { Calculator Counter; int i; for(i=0;i5;i++) { ++Counter; //Counter.operator++() cout\nCounter=Counter(); } for(i=0;i5;i++) { --Counter; //Counter.opera

文档评论(0)

ldj215322 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档