- 1、本文档共30页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第二章 运算符重载
第二章运算符重载 目标 重载函数、递归函数 运算符重载基本概念 运算符重载规则 单目运算符重载 双目运算符重载 重载函数 重载函数(overloaded function)是C++支持的一种特殊函数。 重载函数的定义:在相同的声明域中的函数名相同的,而参数表不同的,即通过函数的参数表而唯一标识并且来区分函数的一种特殊的函数。 例如:求最大值函数max。 Int max(int a,int b);//该函数只支持int类型 为了支持更多的类型,就要使用重载函数。 Float max(float a,float b);//等等 在C++中重载函数屡见不鲜: 例如:cout可以支持各种类型的输出, 又如:一个类的构造函数可以是多种形式,其实就是构造函数的重载。 构造函数的功能是,让函数的功能支持更多类型,并在调用时自动识别适合的类型。 递归函数 C语言函数可以自我调用。如果函数内部一个语句调用了函数自己,则称这个函数是“递归”。递归是以自身定义的过程。也可称为“循环定义”。 递归函数与循环语句的对比: 递归函数的功能跟循环语句的功能基本是一样的。 递归有点:代码更简洁清晰,可读性更好。 递归缺点:由于递归需要系统堆栈,所以空间消耗要比非递归代码要大很多。如果递归深度太大,系统就有可能撑不住。 对于线性结构的遍历,推荐使用循环可以节省空间消耗。 对于非线性结构的变量,有时难于用循环取代递归函数,例如:对二叉树遍历或者对目录系统的遍历等等。 递归函数跟循环一样,要求一定要有结束条件,否则就是死递归。死递归比死循环更严重,不但消耗CPU空间而且会耗尽栈空间。 例如: 运算符重载一般概念 C++内部定义的数据类型(int , float, …)的数据操作可以用运算符号来表示,其使用形式是表达式,用户自定义的类型的数据的操作则用函数表示,其使用形式是函数调用。为了对用户自定义数据类型的数据的操作与内定义的数据类型的数据的操作形式一致,C++提供了运算符的重载,通过把C++中预定义的运算符重载为类的成员函数或者友员函数,使得对用户的自定义数据类型的数据—对象的操作形式与C++内部定义的类型的数据一致。 运算符重载即对C++内部的基本数据类型所支持的运算符赋予新的含义,让其可操作自定义的数据类型。运算符重载指对已知的运算符,在新的场合,通过程序实现新的行为。 运算符重载规则 允许重载的运算符 标准C++中提供的运算符很多,但允许重载的运算符只能是下表中所列。参见下表。 不允许重载的运算符 不允许重载的运算符 不允许重载的运算符只有5个: . (成员访问符) .* (成员指针访问运算符) :: (域运算符) sizeof (长度运算符) ?: (条件运算符号) 其他规则 不允许自己定义新的运算符,只能对已有的运算符号进行重载; 重载不能改变运算符运算对象的个数,如和是双目运算符,重载后仍为双目运算符,需要两个参数; 重载不能改变运算符的结合性,如=是从右至左,重载后仍然为从右至左; 重载不能改变运算符的优先级别,例如* / 优先于+ -,那么重载后也是同样的优先级别; 重载运算符的函数不能有默认的参数,否则就改变了运算符参数的个数,与第2条矛盾; 重载的运算符必须和用户的自定义数据类型一起使用,其参数至少应有一个是类对象(或者类对象的引用),或者说参数不能全部是C++的标准类型; 运算符重载函数可以是类的成员函数,也可以是类的友员函数,也可以使普通函数。 单目运算符 我们知道单目运算符是指该运算符只操作一个数据,由此产生另一个数据,如正数运算符和负数运算符。双目运算符则是要操作两个数据,由此产生另一个数据,如一般的算术运算符和比较运算符都双目运算符。 1、在一个类中重载一元运算符@为类运算符的形式为: 返回值类型 类名::operator@() { //… } 单目运算符 2、在一个类中重载一元运算符@为友员运算符的形式为: 返回值类型 operator@(const 类名 obj) { //… } 3、在一个类中重载二元运算符@为类运算符的形式为: 返回值类型 类名::operator@(参数1) { //… } 双目运算符重载 双目运算符需要两个运算符,这量的函数原型为何仅列出了一个参数?这是因为类本身也是一个参数,存取该参数可以通过this关键字来实现。 在一个类中重载二元运算符@为友员运算符的形式为: 返回值类型 operator@(参数1,参数2) { //… } 运算符重载---普通函数 class CComplex { public: double m_fReal; double m_fImag; char m_szStatus[32]; CComplex(){ m_fReal=0; m_
您可能关注的文档
- 贝雪婴儿湖南市场母亲节促销方案.doc
- 纯碱MSDS.doc
- 1.2 函数的极限(学生版).ppt
- 施工现场安全文明生产制度1.doc
- 黄坪数学特级教师工作室课题研究中期报告.doc
- 2012年高考数学(上海卷).doc
- 77班百日誓师(喜).ppt
- 专题四 电磁感应力电综合.doc
- LWX-ET微机消谐装置.pdf
- 明珠年度品牌方案终.ppt
- 2025年湖南省邵阳市双清区中考三模道德与法治试题.docx
- 广东省惠州五校2024-2025学年高二下学期第二次联考(期中)政治试卷(原卷版+解析版).docx
- 广西南宁凤岭北中学2024—2025学年下学期第三月考七年级数学试卷.docx
- 广西壮族自治区河池市十校协作体2024-2025学年高二下学期5月月考地理试题.docx
- 2025年广西壮族自治区百色市中考二模数学试题.docx
- 贵州省贵阳市七校2024-2025学年高一下学期5月月考地理试题.docx
- 2025届河北省邢台市郉襄联盟高三模拟预测地理试题(原卷版+解析版).docx
- 2025年贵州省贵阳市花溪区青岩贵璜中学中考一模化学试题.docx
- 广东省部分学校2024-2025学年高二下学期5月联考地理试题.docx
- 2025届广东省广州市某校高三下学期5月三模政治试题(原卷版+解析版).docx
文档评论(0)