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