- 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
[计算机软件及应用]第7章 运算符重载
第二部分 面向对象的程序设计 第3章 类和对象(一) 第4章 类和对象(二) 第5章 继承和派生 第6章 虚函数与多态性 第7章 运算符重载 第8章 模板 第9章 标准模板库STL 第10章 C++语言的输入和输出 第7章 运算符重载 本章重点: 运算符重载的概念 运算符重载的规则 运算符重载为友元函数 运算符重载为成员函数 几种常用运算符的重载 重载是面向对象程序设计的基本特点之一,在这种机制下,同样的函数名或运算符可以实现不同的操作。 在编译连接过程中,系统自动根据参数个数或参数类型等特征确定同名标识符调用的程序代码段。 将系统预定义的运算符,用于用户自定义的数据类型,这就是运算符重载。 C++的运算符重载机制使得用户可以在自定义类中以运算符函数的形式提供一些常见功能.只要在类中提供了运算符函数,就可以对类的对象采用该运算符实现操作,这样使得程序看起来更加专业和简洁. 7.1 运算符重载的概念 【例7.1】在下面的程序段定义了一个复数类,为了实现复数的加法,可以定义一个成员函数Add,调用它可以实现两个复数对象相加,并返回一个新的复数对象。 /* 07_01.cpp */ class Complex //复数类 { private: double image; double real; public: Complex(double x=0.0,double y=0.0)//构造函数 { real =x; image =y; } Complex Add(const Complex c) //相加函数 { Complex temp(real+c.real,image+c.image); return temp; } }; 接下来可以使用该类定义三个对象 Complex a(5,7), b(10,8),c; 然后用下面的操作实现复数对象a加上b,结果赋给对象c: c = a.Add(b); 虽然上述操作可以实现复数的加法操作,但是我们更希望能使用“+”运算符,写出表达式: c = a + b; 运算符重载的实质就是函数重载。在C++中,所有系统预定义的运算符都是通过运算符函数来实现的。例如有两个int型变量 i、j,有如下表达式: i + j 编译器在分析表达式时,自动把它解释成如下形式: operator +(i,j) 其中,operator是C++的关键字,它与后面的“+”共同组成了该运算符函数的函数名,标准C++中已经为各种基本数据类型重载了运算符函数 operator + ( )。这些重载形式可能包括 operator +(int,int) operator +(float,float) operator +(double,double) 7.2运算符重载的规则 1.运算符重载的格式 重载运算符函数的一般格式为: T operator @(参数表) { 重载函数体 } 其中T为返回类型,operator为关键字,@为运算符名称,参数表为参与运算的数据即操作数,可以是一个或两个,因此从所需操作数的数量上来区分,可分为单目运算符和双目运算符两种。 一般在对类的对象进行操作的函数中,都要能访问类中的私有数据所以要么将这些函数定义成类的成员函数,要么将它定义成类的友元函数,运算符函数的重载也是如此。 为区别这两种情况,将作为类成员的运算符函数称为成员运算符函数,将作为类的友元的运算符函数称为友元运算符函数. 但对于同一个运算符,要么定义为类运算符,要么定义为友元运算符,不能两者都定义,不然会产生二义性,编译不能通过。 对于复合类型的数据如类和结构体,运算符的重载形式通常可以定义友元函数和成员函数两种,这部分内容会在下两节内容中讨论。 运算符函数的参数建议都声明为引用型,可以最大程度的提高运行效率,如果不希望在函数内部对参数有所改动,可以在参数前加const关键字加以限定。 2.运算符重载需要遵守的规则: C++中绝大多数的运算符都可以被重载,具体如表7.1所示。 表7.1所示 C++允许重载的运算符 C++中有5个运算符不能重载,如表7.2所示。 另外还有: C++ 不允许定义新的运算符,只能对C++中的预定义运算符进行重载。 要说明的是输入输出对象用到的运算符和,并不是新增加的运算符,而是输入、输出对象重载了位运算的左移和右移两个运算符。 运算符重载不能改变该运算符操作数(对象)的个数。 运算符重载不能改变该运算符的优先级别和结合性。 运算符重载应该符合实际需要,重载的功能应该与运算符原有的功能相似,例如重载了加法运算符,而函数体的实际操作却是减法,这样的重载是不值得推荐的。 7.3运算符重载为友元成员函数 作为友元运算符函数,首先要在相应
文档评论(0)