网站大量收购闲置独家精品文档,联系QQ:2885784924

C++面向对象程序设计-运算符重载与类模板.ppt

C++面向对象程序设计-运算符重载与类模板.ppt

  1. 1、本文档共26页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
C面向对象程序设计-运算符重载与类模板

C++面向对象程序设计 第十章 运算符重载与类模板 学习目标 ⑴理解为什么要进行运算符重载,在什么情况下要进行运算符重载 ⑵掌握通过成员函数重载运算符,借助友元函数实现运算符重载 ⑶理解引用在运算符重载中的作用,引用作为参数和返回值的好处和用法 ⑷理解类型转换的必要性,能够在程序设计中正确应用类型转换 ⑸理解为什么要引入类模板的概念,掌握类模板的应用 10.1 为什么要进行运算符重载 10.1.1 运算符重载的例子 在程序中,经常会使用运算符,但C++中已经定义的运算符都是针对基本数据类型的,那么能否将它们用于复杂的类对象呢?在学习本章之前,我们往往是编写实现相应运算功能的函数来解决复杂类型的运算问题。首先来看一个复数加法运算的例子,请注意程序中,加法运算时表达式的书写形式。 【例6-1】复数的加运算。见教材P133 程序说明: 在【例10-1】为了解决复数的存储问题,在复数类Complex中,定义了两个私有成员变量:real(复数的实部)和imag(复数的虚部);并定义了公有的复数加法函数add()和友元输出函数print()显示复数。在main函数中定义了三个复数对象,使用加法函数add进行3个复数的相加,并输出结果。 在程序中三个复数相加的表达式为: c4 = c1.add(c2).add(c3); 用这种方式书写表达式,不仅形式复杂、不符合人们的日常书写习惯,而且不易理解;复数的运算越复杂,书写的表达式越困难,给使用自定义类编写程序带来诸多不便。如果能够像使用基本类型那样用运算符来书写复数运算表达式(如c4 = c1+c2+c3;),不仅书写简单,也更容易理解;这正是在C++中引入了运算符重载的意义所在。下面通过使用运算符重载进行复数加运算例子来了解如何进行运算符的重载。 【例10-2】使用运算符重载进行复数加运算 见教材P134 输出结果: 11+2i 程序说明: 该程序的作用和【例10-1】相同,只是用运算符重载函数代替了加法函数。 比较两个程序不难发现,【例10-2】中书写的复数相加表达式,含义清晰,便于书写。让复数类的使用变得更加简易。 程序中“+”运算符重载的定义如下: Complex operator +(Complex c); 它与一般函数的定义非常相似,不同的是运算符重载函数的名字(“operator +”)是由“operator”关键字和紧随其后的运算符“+”组成;关键字“operator”表明该函数是一个运算符重载函数。在【例10-2】中,该函数是作为类Complex的成员函数,因此把以这种方式的运算符重载称作重载为类运算符。 【例10-3】重载为友元运算符进行复数加运算 见教材P136 输出结果:11+2i 程序说明: 本例实现的功能与【例10-1】和【例10-2】完全相同。 本例中,“+”运算符重载函数的定义如下: Complex operator +(Complex c1,Complex c2); 由于该函数是一般的普通函数,不是类的成员函数,只是为能够访问类的私有数据成员,而把其声明为类的友元函数,因此在定义时参数表中必须指定两个参数:第1个参数作为运算符的左操作数,第2参数作为运算符的右操作数。 10.1.2 注意事项 C++对运算符重载作出了一定的限制和规定,在重载运算符时,需要注意以下几点: ⑴不是所有运算符都可以被重载。 C++的大部分运算符都可以被重载。可以重载的运算符如下: new new[] delete delete[] + - * / % ^ | ~ = += -= *- /= %= ^= = |= || ++ -- -* - () [] 其中,运算符()是函数调用运算符,[]是下标运算符。+、-、* 和 的一元、二元形式都可以被重载。自增运算符 ++ 和自减运算符 -- 的前置、后置形式都可以被重载。 以上可重载运算符中,除了赋值运算符=之外,基类中所有被重载的运算符都将被派生类继承。 不可以重载的运算符如下: .(成员运算符) .* (成员对象选择符) :: (解析运算符) ?: (条件运算符) ⑵重载不能改变运算符的优先级。 假定已定义了复数类Complex, 并且已定义了加法和乘法运算符重载函数, Complex c1(1, 2), c2(3, 4), c3(5, 6), answer; answer = c1 + c2 * c3;

文档评论(0)

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

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

1亿VIP精品文档

相关文档