- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
uml8 运算符重载
UML与程序设计(C++) 第8章 运算符重载 8.1 运算符重载的需要性 C++中预定义的运算符的操作对象只能是基本数据类型,实际上,对于很多用户自定义类型也需要有类似的运算操作。例如,一个复数类定义如下: class complex { public: complex(double r=0.0, double i=0.0) {real=r; imag=i;} private: double real; double imag; }; 运算符重载就是对已有的运算符赋予多重含义,使同一种运算符作用于不同类型的数据导致不同类型的行为。 可以声明复数类的对象: complex a(10,20),b(5,8); 如果需要对a和b进行加法运算,但编译器不能理解形如a+b这样的表达式,这时就需要我们自己编写程序说明“+”运算作用在复数类对象上应该完成什么功能,这就是运算符重载。 8.1 运算符重载的需要性 class complex { public: complex(double r=0.0, double i=0.0) {real=r; imag=i;} complex operator +(const complex c); //重载 ”+” 运算符 { return complex(real+c.real,imag+c.imag); } private: double real; double imag; }; void main() { complex c1(2.0),c2(3.0,-1.0; c3=c1+c2; //此语句会被编译系统解释为c3=c1.operator+(c2) } 8.2 如何运算符重载 C++中的运算符除少数几个之外,大多可以重载,而且只能重载C++中已有的运算符。不能重载的运算符包括:. 、 ::、.*、?:和sizeof。 重载之后运算符的优先级和结合性不会改变。 运算符重载是针对新数据类型的需要,对现有运算符进行适当的改造。一般来讲,重载的功能应当与原有功能相似,不能改变原运算符的操所对象个数,同时至少要有一个操作对象是自定义类型。 运算符重载的实质就是函数重载。在实现过程中,首先把指定的运算表达式转化为对运算符函数的调用,运算对象转化为运算符函数的实参,然后根据实参的类型来确定需要调用的函数,这个过程是在编译过程中完成的。 8.2 如何运算符重载 运算符重载的形式有两种,重载为类的成员函数和重载为类的友元函数,语法格式如下: 函数类型 operator 运算符 (形参表) {函数体;} friend 函数类型 operator 运算符 (形参表) {函数体;} 说明: 函数类型 指定了重载运算符的返回值类型,也就是运算结果类型; operator 是定义运算符重载函数的关键字; 运算符 是要重载的运算符名称; 形参表 中给出重载运算符所需要的参数和类型。 8.2 运算符重载 当运算符重载为类的成员函数时,函数的参数个数比原来的操作数少一个(后置的++、--除外)。原因是重载为类的成员函数时,如果某个对象使用了重载的成员函数,其自身的数据可以直接被访问,就不需要通过参数传递了,少了的操作数就是该对象本身。 当重载为类的友元函数时,参数个数与原来操作数的个数相同。因为友元函数对某个对象的数据成员进行操作,就必须通过该对象的名称来进行,因此使用到的参数都需要进行传递,操作数的个数不会发生变化。 C++规定,=、()、[]、-四种运算符必须重载为成员函数。 8.3 值返回和引用返回 例18-2中operator+()返回值,而operator++()返回引用,这样做的原因是: operator+()实现两个对象相加,不会改变其中任何一个对象,而且它必须生成一个结果对象来存放加法的结果,并将该结果对象以值的方式返回给调用者。 如果以引用返回,则会导致返回局部对象引用的情况。 通过值返回,将有一个临时对象在调用者的栈空间产生,系统将被调用函数中的result对象复制到临时对象,此临时对象再赋值给调用表达式中接收返回值的对象。 8.3 值返回和引用返回 与operator+()不同,operator++()修改了它的参数,而且其返回值要求是左值,这个条件决定了它不能以值返回。 RMB operator ++(RMB s) { s.jf ++; if(s.jf = 100){ s.jf -= 100; s.yuan++; } return s; } //…… RMB a(2,50); c=a++; c=++a; c=++(++a); //error 因为++a返回一个对
您可能关注的文档
最近下载
- 智能化生产12万吨高端耐火材料项目环境影响报告表.pdf VIP
- 研究生学术规范与学术诚信(南京大)中国大学MOOC慕课 客观题答案.docx VIP
- 赵一鸣员工考核内容附答案.docx
- 施工机械安全管理制度.docx VIP
- 人教版五年级数学下册《因数和倍数》试卷[共3页].doc VIP
- 高二学考完形填空复习1.doc VIP
- 中国会计文化全套配套课件赵丽生PPT7中国古代经济思想家孟子.pptx VIP
- 五年级下册数学第六单元分数的加法和减法测试卷 人教版.doc VIP
- 中国会计文化全套配套课件赵丽生PPT26山西革命根据地会计的历史贡献.pptx VIP
- 党课PPT:铸牢中华民族共同体意识.pptx VIP
文档评论(0)