Chapt-4-运算符重载.ppt

  1. 1、本文档共44页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第4章 运算符重载 基本内容 4.1 运算符重载的概念 4.2 运算符重载的方法 4.3 运算符重载的规则 4.4 运算符重载函数作为成员函数与友元函数 4.5 双目运算符重载 4.6 单目运算符重载 4.7 输入输出运算符重载 4.8 不同数据类型之间的转换(涉及类继承的转换在继承与派生中讲述) 4.1 运算符重载的概念 4.1 运算符重载的概念 和函数重载类似,只不过运算符重载的“函数“是一个运算符罢了! 如:+ - * / ++ -- 都可通过重载赋予它们新的含义! 4.2 运算符重载的方法 4.2 运算符重载的方法 函数类型 operator 运算符名称 (形参表){函数体} CComplex operator - (CComplex c1)重载了减法运算符 CComplex operator -()重载了负号运算符 CComplex operator ++(int)重载了后置++运算符 CComplex operator ++()重载了前置++运算符 4.3 运算符重载的规则 4.3 运算符重载的规则 不能自定义新的运算符 重载运算符无法改变任何运算符的优先级与结合性质; 重载运算符不可改变运算符的操作数个数; 使用重载运算符,操作数之一必须为对象或对象引用 重载运算符=不可使用缺省参数; 除了赋值运算外,重载运算符可由派生类继承下去; 运算符=、()、[]和-必须为类成员运算符,不可作为友元运算符。而输入输出 、类型转换不能作为成员函数。 应用运算符重载的前提应该是保证运算符的语法与语义习惯,因而运算符重载主要用于与数学相关的领域。在其他情况下,使用有含义的标识符作为函数名字比运算符更容易理解与掌握。 以下五个运算符不能重载:. :: ?: .* sizeof 4.4 运算符重载为成员函数和友元函数 4.4.1 运算符函数(1) 运算符可以理解为一个函数。如 5+8可以理解为二元函数+(5,8),“+”作为加法函数名。 对于程序员自己定义的类类型,在一些情况下如果能直接用运算符代替函数名,更容易理解,与基本数据类型的使用风格保持一致。 例如复数相加、矩阵相加、字符串连接等操作也可用“+”表示,且函数调用也写成可作复合运算的加法表达式,那么程序员就可以用更加自然的方式使用新定义的类类型。 4.4.1 运算符函数(2) 运算符实际上是函数的特殊形式,C++语言允许运算符的语义由程序员重新定义,这一机制称为运算符重载,而这些由程序员自己重新定义的运算符又称运算符函数。 类成员运算符:在类中定义的运算符成员函数。 友元运算符:在类之外定义的运算符函数。 也可以作为普通函数重载(很少用) 4.4.2 类成员运算符重载(1) 类成员运算符重载的一般形式为: 类型 类名::operator 运算符(参数表) { //运算符函数体 } 其中,尽管运算符函数的返回值类型可以是任意的,但一般设计为当前的类类型以便进行复合运算。与重载函数不同,运算符函数的参数受到所重载的运算符的约束,不可随意指定 4.4.2 类成员运算符重载(2) 运算符重载函数的函数名必须为关键字 operator 加一个合法的运算符 在 调用该函数时,将右操作数作为函数的实参。 当用类的成员函数实现运算符的重载时,运算符重载函数的参数(当为双目运算符时)为一个或(当为单目运算符时)没有。运算符的左操作数一定是 对象,因为重载的运算符是该对象的成员函数,而右操作数是该函数的参数, 其类型并无严格限制。 4.5 重载双目运算符 4.5 重载双目运算符 通过实例讲解+, *等运算符的重载. 4.6 重载单目运算符 4.6 重载一元运算符(1) 前置“++”格式为: 返回类型 类名 ::operator++(){……} 后置“++”格式为:返回类型 类名 ::operator++(int){……} 后置“++”中的参数 int 仅用作区分,并无实际意义,可以给一个变量名,也可以不给变量名。 4.6 重载一元运算符(2) #include iostream using namespace std; class Count{ public: Count(){v=0;} Count operator ++(); Count operator ++(int); void print(){coutvendl;} private: unsigned v; }; 4.6 重载一元运算符(3) 重载定义前缀和后缀操作符时存在一个问题,它们的形参数目、类型都一样,这样重载时不能区分定义的是前缀还是后缀操作符。 因此,规定后缀操作符接受一个额外的int形参。使用时,编译器提供一个0作为这个形参的实参。这个int形参对定义的实现

文档评论(0)

js1180 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档