下载此文档

C 面向对象程序设计.ppt


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

C 面向对象程序设计 来自淘豆网www.taodocs.com转载请标明出处.

相关文档 更多>>
非法内容举报中心
文档信息
  • 页数26
  • 收藏数0 收藏
  • 顶次数0
  • 上传人花开花落
  • 文件大小112 KB
  • 时间2019-06-28