




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第第11章章 运算符重载运算符重载 在在C+语言中,用户除了可以实现成员函数的重载以外,还可以实现运算符语言中,用户除了可以实现成员函数的重载以外,还可以实现运算符的重载。可以实现重载功能的运算符有单目运算符、双目运算符以及赋值运算符的重载。可以实现重载功能的运算符有单目运算符、双目运算符以及赋值运算符等几种。在本章中,将向用户介绍关于等几种。在本章中,将向用户介绍关于C+运算符的相关知识点。通过本章的学习运算符的相关知识点。通过本章的学习,用户学习到以下几个知识点:,用户学习到以下几个知识点:(1)C+常用运算符的介绍常用运算符的介绍(2)运算符重载的基础以及优点运算符重载的基础以及优点(3
2、)如何将运算符重载为成员函数如何将运算符重载为成员函数(4)如何操作单目运算符如何操作单目运算符(5)如何操作双目运算符如何操作双目运算符(6)如何使用赋值运算符如何使用赋值运算符11.1 C+运算符运算符 C+运算符是指在运算符是指在C+语言中能够进行数学运算或者赋值等运算的操作符。语言中能够进行数学运算或者赋值等运算的操作符。通过这些运算符,用户可以实现各种类型的数学运算或者赋值运算等操作。因此通过这些运算符,用户可以实现各种类型的数学运算或者赋值运算等操作。因此,在本节中,将向用户介绍一些关于,在本节中,将向用户介绍一些关于C+运算符的相关基础知识以及使用运算符的运算符的相关基础知识以及
3、使用运算符的优点等。优点等。 11.1.1 C+常用运算符常用运算符 用户在进行实际编程时,经常使用到的运算符包括了加、减、乘、除等数用户在进行实际编程时,经常使用到的运算符包括了加、减、乘、除等数学运算符。当然,还包括了一些赋值运算符等。例如,用户常用的操作符学运算符。当然,还包括了一些赋值运算符等。例如,用户常用的操作符“new”和和“delete”也是赋值运算符。也是赋值运算符。由于在由于在C+语言中,基本的运算符功能已经实现了。所以,用户在使用时,语言中,基本的运算符功能已经实现了。所以,用户在使用时,可以直接进行运算即可。例如,用户在实例程序中需要实现两个数字的所有数学可以直接进行运
4、算即可。例如,用户在实例程序中需要实现两个数字的所有数学运算。则可以直接使用已经预定义的数学运算符进行实现就可以了。运算。则可以直接使用已经预定义的数学运算符进行实现就可以了。 11.1.2 运算符重载基础运算符重载基础 在在C+语言中,用户只能够使用预定义的一些数学运算符和赋值运算符。如语言中,用户只能够使用预定义的一些数学运算符和赋值运算符。如果用户需要在程序中,实现其他的一些运算功能,则应该将运算符进行重载,以果用户需要在程序中,实现其他的一些运算功能,则应该将运算符进行重载,以便实现不同的功能。在本小节中,将向用户介绍关于运算符重载的一些基础知识便实现不同的功能。在本小节中,将向用户介
5、绍关于运算符重载的一些基础知识。通常情况下,运算符重载可以使用关键字通常情况下,运算符重载可以使用关键字“operator”进行声明。运算符重进行声明。运算符重载的原型如下所示:载的原型如下所示:01 (类名类名)operator(运算符运算符)(const 类名类名&);/运算符重载的原型运算符重载的原型在上面的代码中,在上面的代码中,“类名类名”表示用户自定义的表示用户自定义的C+类名。而类名。而“运算符运算符”则表则表示用户需要重载的运算符标识。例如,用户在代码中,可以使用上面的运算符重示用户需要重载的运算符标识。例如,用户在代码中,可以使用上面的运算符重载原型对运算符载原型对运算符“+
6、”进行重载,以便实现两个字符串的连接功能。进行重载,以便实现两个字符串的连接功能。 11.1.3 运算符重载的优点运算符重载的优点 通过前面对运算符重载的相关知识点的学习,用户已经对运算符重载的操通过前面对运算符重载的相关知识点的学习,用户已经对运算符重载的操作方法有了进一步的理解。那么,用户为什么会需要在程序中,实现运算符重载作方法有了进一步的理解。那么,用户为什么会需要在程序中,实现运算符重载的相关功能了。在本小节中,将向用户介绍运算符重载的优点。的相关功能了。在本小节中,将向用户介绍运算符重载的优点。通常情况下,用户还可以使用同一种运算符去实现不同的运算功能。例如通常情况下,用户还可以使
7、用同一种运算符去实现不同的运算功能。例如,运算符,运算符“+”,在数学运算中,可以被用于进行加法运算。而该运算符被用于两,在数学运算中,可以被用于进行加法运算。而该运算符被用于两个字符串之间时,又可以被用来对字符串数据进行连接操作等。个字符串之间时,又可以被用来对字符串数据进行连接操作等。总而言之,用户通过运算符重载可以实现很多功能。不仅可以扩展总而言之,用户通过运算符重载可以实现很多功能。不仅可以扩展C+语言语言的一些预定功能,还能够实现用户的自定义功能。所以,运算符重载操作对于一的一些预定功能,还能够实现用户的自定义功能。所以,运算符重载操作对于一个程序员而言是非常重要的一个知识点。个程序
8、员而言是非常重要的一个知识点。 11.2 运算符重载为成员函数运算符重载为成员函数 在在C+语言中,用户可以在自定义类中,将运算符重载函数定义为类的成员函语言中,用户可以在自定义类中,将运算符重载函数定义为类的成员函数。这样,用户可以非常方便地对这些运算符重载函数进行调用,也符合了面向对象数。这样,用户可以非常方便地对这些运算符重载函数进行调用,也符合了面向对象编程的特点。因此,在本节中,将向用户讲解如何将运算符重载函数定义为成员函数编程的特点。因此,在本节中,将向用户讲解如何将运算符重载函数定义为成员函数和友元函数的方法及其调用、实现等相关的操作。和友元函数的方法及其调用、实现等相关的操作。
9、11.2.1 运算符重载为成员函数运算符重载为成员函数 用户在实例程序中,可以将运算符重载函数直接定义在用户在实例程序中,可以将运算符重载函数直接定义在C+类中,并设置相类中,并设置相关的访问控制权限就可以将重载函数定义了类的成员函数了。关的访问控制权限就可以将重载函数定义了类的成员函数了。1定义运算符重载成员函数定义运算符重载成员函数用户在定义自定义类时,可以直接将运算符重载函数定义在类中就可以实用户在定义自定义类时,可以直接将运算符重载函数定义在类中就可以实现重载成员函数了。现重载成员函数了。 2实现运算符重载成员函数实现运算符重载成员函数在前一小节中,用户已经在自定义类在前一小节中,用户
10、已经在自定义类“demo”中定义了加、减、乘、除四中定义了加、减、乘、除四种运算符的重载成员函数了。那么,现在用户可以在自定义类的外部对这些运算种运算符的重载成员函数了。那么,现在用户可以在自定义类的外部对这些运算符重载成员函数进行具体功能的实现了。其实现的方法与前面所讲解的类成员函符重载成员函数进行具体功能的实现了。其实现的方法与前面所讲解的类成员函数的实现方法是相同的。数的实现方法是相同的。 【本例代码位置:源文件本例代码位置:源文件11运算符重载成员函数运算符重载成员函数运算符重载成员函数运算符重载成员函数.cpp】 11.2.2 运算符重载为友元函数运算符重载为友元函数 在在C+语言中
11、,用户也可以将运算符重载函数定义为友元函数。这样,用户语言中,用户也可以将运算符重载函数定义为友元函数。这样,用户就可以在类的外部直接对类中的私有成员变量进行直接访问了。那么,在本小节就可以在类的外部直接对类中的私有成员变量进行直接访问了。那么,在本小节中,将主要向用户介绍友元函数的相关定义方法和实现方法以及如何调用定义为中,将主要向用户介绍友元函数的相关定义方法和实现方法以及如何调用定义为友元函数的运算符重载函数实现运算功能。友元函数的运算符重载函数实现运算功能。友元函数之所以可以访问友元函数之所以可以访问C+类中的私有成员变量,是因为友元函数就好像类中的私有成员变量,是因为友元函数就好像是
12、在已经封装好的是在已经封装好的C+类上所开的一个小孔,以便外界对其内部进行访问。所以,类上所开的一个小孔,以便外界对其内部进行访问。所以,友元函数并不属于友元函数并不属于C+类中的成员函数。因此,用户也不能够在友元函数中使用指类中的成员函数。因此,用户也不能够在友元函数中使用指针针“this”。否则,程序会出现错误。否则,程序会出现错误。例如,用户将前一小节中的实例代码进行修改,添加友元函数的功能。具例如,用户将前一小节中的实例代码进行修改,添加友元函数的功能。具体的代码如下所示:体的代码如下所示:【本例代码位置:源文件本例代码位置:源文件11运算符重载为友元函数运算符重载为友元函数运算符重载
13、为友元函数运算符重载为友元函数.cpp】11.3 单目运算符重载单目运算符重载 在在C+语言中,单目运算符是指该运算符只被用于进行单个数据的运算,即语言中,单目运算符是指该运算符只被用于进行单个数据的运算,即参与运算的数据只有一个。用户在实际编程时,最为常用的单目运算符有前置运参与运算的数据只有一个。用户在实际编程时,最为常用的单目运算符有前置运算符和后置运算符两种。因此,在本节中,将向用户分别介绍这两种单目运算符算符和后置运算符两种。因此,在本节中,将向用户分别介绍这两种单目运算符的定义以及使用方法等。的定义以及使用方法等。11.3.1 前置单目运算符前置单目运算符 前置单目运算符是指运算符
14、在数据之前,即使用格式前置单目运算符是指运算符在数据之前,即使用格式“运算符运算符 运算数据运算数据”进行表示。例如,前置单目运算符进行表示。例如,前置单目运算符“+a”,表示变量,表示变量“a”在使用前会被加一。在在使用前会被加一。在本小节中,将向用户介绍前置单目运算符的相关使用方法等知识点。本小节中,将向用户介绍前置单目运算符的相关使用方法等知识点。1前置单目运算符前置单目运算符通常情况下,运算符在运算数据之前,都表示运算数据在调用之前需要进通常情况下,运算符在运算数据之前,都表示运算数据在调用之前需要进行相应的运算。行相应的运算。 2前置单目运算符重载前置单目运算符重载前置单目运算符重载
15、与前面所讲解的重载知识点相同。因此,用户可以直前置单目运算符重载与前面所讲解的重载知识点相同。因此,用户可以直接将前置单目运算符功能封装到一个重载函数中即可。具体的代码如下所示:接将前置单目运算符功能封装到一个重载函数中即可。具体的代码如下所示:【本例代码位置:源文件本例代码位置:源文件11前置单目运算符重载前置单目运算符重载前置单目运算符重载前置单目运算符重载.cpp】 11.3.2 后置单目运算符后置单目运算符 在在C+语言中,用户常用的前置单目运算符也可以将运算符放到运算数据之语言中,用户常用的前置单目运算符也可以将运算符放到运算数据之后,作为后置单目运算符使用。其基本格式为后,作为后置
16、单目运算符使用。其基本格式为“a+”,表示程序在调用变量,表示程序在调用变量“a”之后,才将变量值进行加之后,才将变量值进行加1操作。在本小节中,将向用户介绍后置单目运算符的使操作。在本小节中,将向用户介绍后置单目运算符的使用方法。用方法。1后置单目运算符后置单目运算符【本例代码位置:源文件本例代码位置:源文件11后置单目运算符后置单目运算符后置单目运算符后置单目运算符.cpp】2后置单目运算符重载后置单目运算符重载【本例代码位置:源文件本例代码位置:源文件11后置单目运算符重载后置单目运算符重载后置单目运算符重载后置单目运算符重载.cpp】 11.4 双目运算符重载双目运算符重载 在在C+语
17、言中,双目运算符包括了前面所介绍过的加、减、乘、除等运算符语言中,双目运算符包括了前面所介绍过的加、减、乘、除等运算符。在本节中,将向用户介绍双目运算符的重载方法等。并且通过实例程序进行相。在本节中,将向用户介绍双目运算符的重载方法等。并且通过实例程序进行相关功能的讲解。关功能的讲解。11.4.1 双目运算符重载函数双目运算符重载函数 双目运算符重载函数是指将双目运算符的功能封装带自定义类的成员函数双目运算符重载函数是指将双目运算符的功能封装带自定义类的成员函数中,并且将该成员函数定义为重载函数,方便类的实例对象进行调用。用户在实中,并且将该成员函数定义为重载函数,方便类的实例对象进行调用。用
18、户在实际编程时,常用的双目运算符包括了加、减、乘、除四种。际编程时,常用的双目运算符包括了加、减、乘、除四种。由于加、减、乘、除四种双目运算符的重载操作已经在前面的小节中进行由于加、减、乘、除四种双目运算符的重载操作已经在前面的小节中进行详细地讲解。所以,在本小节中不再进行赘述。如果用户有什么问题可以对前面详细地讲解。所以,在本小节中不再进行赘述。如果用户有什么问题可以对前面的基础知识再进行复习。的基础知识再进行复习。 11.4.2 实例分析实例分析 在本小节中,将通过实例程序对双目运算符的重载函数进行讲解。通过本在本小节中,将通过实例程序对双目运算符的重载函数进行讲解。通过本小节的学习,希望
19、用户能够熟练掌握双目运算符重载的相关方法。小节的学习,希望用户能够熟练掌握双目运算符重载的相关方法。【实例实例11.1】用户在自定义类中定义两个双目运算符的重载函数,分别实现用户在自定义类中定义两个双目运算符的重载函数,分别实现字符数数据的相加和相减操作。具体的代码如下所示:字符数数据的相加和相减操作。具体的代码如下所示:【本例代码位置:源文件本例代码位置:源文件11实例实例11.111.1cpp】 11.5 赋值运算符重载赋值运算符重载 在在C+语言中,用户常常用来开辟内存空间和删除内存空间的操作符语言中,用户常常用来开辟内存空间和删除内存空间的操作符“new”和和“delete”,实际上是
20、一种赋值运算符。所以,这两个赋值运算符也可以,实际上是一种赋值运算符。所以,这两个赋值运算符也可以被用来进行运算符的重载操作。在本节中,将分别向用户介绍这两个赋值运算符被用来进行运算符的重载操作。在本节中,将分别向用户介绍这两个赋值运算符的重载方法。的重载方法。11.5.1 重载重载new运算符运算符赋值操作符赋值操作符“new”是用于在计算机内存中开辟内存空间所使用的,该操作是用于在计算机内存中开辟内存空间所使用的,该操作符如果操作成功,则会返回以及开辟的内存空间的首地址。因此,该操作符是非符如果操作成功,则会返回以及开辟的内存空间的首地址。因此,该操作符是非常有用的。在本小节中,将向用户介
21、绍操作符常有用的。在本小节中,将向用户介绍操作符“new”的重载实现方法。的重载实现方法。通常情况下,操作符通常情况下,操作符“new”的重载格式如下所示:的重载格式如下所示:01 static void operator new(size_t size);/操作符操作符new的重载格的重载格式式在操作符在操作符“new”的重载格式中,关键字的重载格式中,关键字“operator”表示重载,而重载函表示重载,而重载函数的参数列表中的类型数的参数列表中的类型“size_t”的定义则应该是的定义则应该是“typedef unsigned int size_t”。【实例实例11.2】用户在程序中,定
22、义操作符用户在程序中,定义操作符“new”的重载成员函数,实现相的重载成员函数,实现相应的功能。具体的代码如下所示:应的功能。具体的代码如下所示:【本例代码位置:源文件本例代码位置:源文件11实例实例11.211.2.cpp】 11.5.2 重载重载delete运算符运算符 与操作符与操作符“new”作用相反的操作符是作用相反的操作符是“delete”,其具体的操作方法也是相,其具体的操作方法也是相同的。因此,在本小节中,将向用户介绍操作符同的。因此,在本小节中,将向用户介绍操作符“delete”重载的相关方法。重载的相关方法。例如,用户将操作符例如,用户将操作符“delete”的重载方法封装到自定义类中,并且在类外的重载方法封装到自定义类中,并且在类外进行实现。具体的代码如下所示:进行实现。具体的代码如下所示:【本例代码位置:源文件本例代码位置:源文件11重载重载delete运算符运算符重载重载delete运算符运算符.cpp】 11.6 重载运算符和实例重载运算符和实例 在前面的小节中,已经向用户介绍了运算符在前面的小节中,已经向用户介绍了运算符“”和和“”的相关基的相关基础知识。并且通过实例代码对这两个运算符的重载操作进行了详细的讲解。因此础知识。并且通过实例代码对这两个运算符的重载操作进行了详细的讲解。因此,在本节中,将编写这两个运
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 中国购物中心未来趋势预测分析及投资规划研究建议报告
- 中国小型涡喷发动机市场前景预测及投资规划研究报告
- 2025年中国耐腐压力表行业市场供需格局及投资规划建议报告
- 2025年中国硅酮胶行业市场专项调研及投资前景可行性预测报告目
- 2023-2028年中国活性乳酸菌饮料行业市场深度分析及投资策略咨询报告
- 2022-2027年中国条码识别系统行业运行态势及未来发展趋势预测报告
- 2025年中国数字贸易行业市场规模、行业集中度及发展前景研究报告
- 智能搬运机器人项目可行性研究报告
- 中国人力资源咨询行业发展潜力分析及投资方向研究报告
- 2025年中国手抓饼行业市场运行态势与投资战略咨询报告
- 江苏省环保集团有限公司招聘笔试题库2024
- 铁路货车转向架检修新技术
- 电镀环评评估投标方案技术标
- 山东省济南市市中区2023-2024学年八年级下学期期末数学试题
- 光伏土地征地合同
- 竹类树种识别与应用-刚竹类
- 五年级上册阅读理解题20套(带答案)
- 《苏幕遮》(周邦彦)公开课一等奖
- 《两办意见》解析培训课件-2024年
- 糖尿病中医科普知识讲座总结
- 农资销售半年工作总结报告
评论
0/150
提交评论