- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
C面向对象程序设计第5章运算符重载
第5章 运算符重载 运算符重载概述 什么是运算符重载 所谓运算符重载就是用同一个运算符完成不同的运算功能。 C++运算符重载的相关规定如下: 不能改变运算符的优先级。 不能改变运算符的结合性(例如,算术运算符的结合性为从左到右,这一点不能改变)。 默认参数不能和重载的运算符一起使用,也就是说,在设计运算符重载成员函数时不能使用默认参数。 不能改变运算符的操作数的个数。 不能创建新的运算符,只有已有运算符可以被重载。 运算符作用于C++内部提供的数据类型时,原来含义保持不变。 运算符重载函数的定义格式 当运算符重载为类成员函数时,可以有两种形式:运算符重载函数作为类的成员函数和作为类的友元函数。 1. 运算符重载函数作为类的成员函数 函数类型 operator 重载运算符(形参表) { 函数体; } 2. 运算符重载函数作为类的友元函数 friend 函数类型 operator 重载运算符(形参表) { 函数体; } 运算符重载函数的调用格式 运算符重载函数的调用格式与普通成员函数的调用格式类似,以双目运算符重载成员函数为例,其调用格式如下: 左运算对象 双目运算符 右运算对象 重载单目运算符 重载“++”和“--”运算符 最典型的单目运算符有++和--,它们是变量增1和减1的运算符。在类中可以对这两个单目运算符进行重载。 重载“-”运算符 “-”运算符是成员访问运算符,这种单目运算符只能被重载为成员函数。一般成员访问运算符的使用格式如下: 对象-成员 成员访问运算符“-”函数重载的一般形式为: 数据类型 类名::operator-(); 重载双目运算符 重载双目运算符为成员函数 假设有一个类A,对于双目运算符op,如果重载运算符op使之能够实现表达式“obj1 op obj2”,其中obj1和obj2均为A类的对象。 若把op重载为A类的成员函数,该函数只有一个形参,形参的类型是obj2所属的类型。经过重载之后,表达式“obj1 op obj2”解释为: obj1.operator op(obj2) 左边的对象obj1通过this指针传递,右边的对象obj2由参数传递。 重载双目运算符为友元函数 运算符也可以重载为类的友元函数,这样,它就可以自由地访问该类的任何数据成员。 假设有一个类A,对于双目运算符op,如果重载运算符op使之能够实现表达式“obj1 op obj2”,其中obj1和obj2均为A类的对象。 若把op重载为A类的友元函数,该函数有两个形参,经过重载之后,表达式“obj1 op obj2”解释为: operator op(obj1,obj2) 左右两个对象obj1和obj2都由参数传递。 重载比较运算符 除了单目运算符和双目运算符重载外,也可以设计比较运算符(如“”、“”或“==”)的重载函数。比较运算符重载函数必须返回true(非0)或false(0)。 重载赋值运算符 重载“+=”和“-=”运算符 对于标准数据类型,“+=”和“-=”的作用是将一个数据与另一个数据进行加法或减法运算,然后再将结果回送给赋值号左边的变量中。对它们重载后,使其实现其他相关的功能。 重载“=”运算符 赋值运算符“=”的原有含义是将赋值号右边表达式的结果复制给赋值号左边的变量,通过运算符“=”的重载将赋值号右边对象的数据成员依次复制到赋值号左边对象的数据成员中。在正常情况下,系统会为每一个类自动生成一个默认的完成上述功能的赋值运算符,当然,这种赋值只限于由一个类类型说明的对象之间赋值。 如果一个类包含指针成员,采用这种默认的按成员赋值,那么当这些成员撤销后,内存的使用将变得不可靠。 重载下标运算符 下标运算符“[]”通常用于获取数组的某个元素,重载下标运算符可以实现数组下标的越界检测等。下标运算符重载函数只能作为类的成员函数,不能作为类的友元函数。 重载new与delete运算符 C++提供了new与delete两个运算符用于内存管理,在大多数情况下,它们是非常有效的。但有些情况下我们需要自己管理内存,以克服new与delete的不足。这就要重载运算符new与delete,使其按照要求完成对内存的管理。 new和delete只能被重载为类的成员函数,不能重载为友元。而且,无论是否使用关键字static进行修饰,重载了的new和delete均为类的静态成员函数。 运算符new重载的一般格式如下: void *类名::operator new(size_t,参数表); new重载应返回一个无值型的指针,且至少有一个类型为size_t
您可能关注的文档
- AutoCAD建筑制图实例教程 第2章 二维基本绘图命令.ppt
- AutoCAD建筑制图实例教程 第3章 二维图形编辑.ppt
- AutoCAD2009工程绘图技术 第8章 三维造型.ppt
- AutoCAD建筑制图教程 第11章 轴测图.ppt
- AutoCAD建筑制图教程 第13章 三维绘图.ppt
- AutoCAD建筑制图教程 第2章 绘制线段、平行线及圆.ppt
- AutoCAD建筑制图实例教程 第8章 建筑平面图实例.ppt
- AutoCAD建筑制图实例教程 第7章 样板文件.ppt
- AutoCAD建筑制图教程 第1章 AutoCAD绘图环境及基本操作.ppt
- AutoCAD建筑制图教程 第3章 绘制多线、多段线、阵列及镜像对象.ppt
原创力文档


文档评论(0)