C++-运算符重载-各类详细介绍.ppt

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

第7章运算符重载本章主要内容7.1引入运算符重载的原因及运算符重载的规则7.2运算符重载函数的两种形式7.3几种常用运算符的重载7.4类型转换本章重点几种常用运算符的重载与类型转换本章难点单目运算符“++”与“—”的重载本章所需学时:4学时§7.1运算符重载概述引入运算符重载的原因例如:inta=1,b=2;floatc=1.1,d=2.4;inte=a+b;floatf=c+d;floatg=f+e;为什么同一个运算符“+”可以用于完成不同类型的数据的加运算呢?原来C++语言针对预定义数据类型已经对某些运算符做了适当的重载。C++语言提供的预定义数据类型终究是有限的,我们在解决多种多样的实际问题时,往往需要使用许多的自定义数据类型。例如,在解决科学与工程计算问题时,往往要使用复数、矩阵等。下面定义一个简化的复数类complexclasscomplex{public:doublereal,imag;complex(doubler=0,doublei=0){real=r,imag=i;}main(){complexcom1(1.1,2.2),com2(3.3,4.4),total;total=com1+com2;//错误//…return0;}错误原因在于complex类类型不是预定义的基本数据类型,而是用户自定义的数据类型。C++知道如何相加两个int数据,或相加两个float型数据,甚至知道如何把一个int型数据与一个float型数据相加,但是C++并不知道怎样将两个complex类类型的对象进行相加,这样需要我们来重载“+”运算符来解决两对象相加的问题运算符重载的定义格式:函数类型operator@[运算符](形参表){函数体;}在编译时遇到operator@的运算符函数,就检查传递给函数的参数的类型。如果编译器在一个运算符的两边有自定义的数据类型。就执行用户自己的函数,而不是内部运算符的常规程序。那么上例中的错误,就是需要重载重载+运算符,其运算符函数operator+()如下:complexoperator+(complexcom1,complexcom2){complextemp;temp.real=com1.real+com2.real;temp.real=com1.imag+com2.imag;returntemp;}其中主函数的total=com1+com2;(隐式调用)语句也可以写成:total=operator+(com1,com2);(显式调用)从中可以看出运算符重载进一步提高了面向对象软件系统的灵活性、可扩充性和可读性运算符重载的规则重载运算符与预定义运算符的使用方法完全相同,被重载的运算符不改变原来的操作数个数、优先级和结合性。重载的运算符只能是运算符集中的运算符,不能另创新的运算符。运算符的含义可以改变,但最好不改变。如实数的加法运算可以用乘法运算符来实现在C++中,大多数系统预定义运算符可以把被重载,但也有些运算符不能被重载如:类属关系运算符“.”、成员指针运算符“*”、作用域分辨符“::”、sizeof运算符和三目运算符“?:”不能改变运算符对预定义类型的操作方式§7.2运算符重载两种形式运算符重载与函数重载相似,其目的是设置某一运算符,让它具有另一种功能,尽管此运算符在原先C++语言中代表另一种含义,但他们彼此之间并不冲突。C++会根据运算符中的操作数来辨别应使用哪一种功能进行运算。在类外定义运算符重载函数,只能对类公有数据成员进行操作。实际上,运算符的重载有两种形式:定义为类的类友元函数;定义为它将要操作的类的成员函数。前者称为友元运算符函数,后者为成员运算符函数。友元运算符函数概念友元运算符函数定义的语法形式声明friendtypeoperator@(形数表);定义typeoperator@(形数表){//函数体}其中,type(函数类型)指定了重载运算符的返回值类型,operator是定义运算符重载函数的关键词,@(运算符)给定了要重载的运算符名称,是C++中可重载的运算符,形参表中给出重载运算符所需要的参数和类型由于友元运算符函数不是类的成员函数,所以没有this指针。如果重载的运算符函数是双目的运算符,则参数表中有两个操作数,若为单目运算符,则参数表中有一个操作数双目运算符重载当用友元函数重载双目运算符时,两个操作数都要传递给运算符函数。一般

文档评论(0)

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

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

1亿VIP精品文档

相关文档