第6章多态性和虚函数.ppt

  1. 1、本文档共32页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第6章多态性和虚函数资料

6.1 运算符重载 6.1.1 运算符重载概述 6.1.2 用成员函数重载运算符 6.1.3 用友元函数重载运算符 6.1.4 几个常用运算符的重载 6.1.1 运算符重载概述 1. 运算符重载定义 运算符重载是对已有的运算符赋予多重含义,同一个运算符作用于不同类型的数据导致不同类型的行为。C++中预定义的运算符的操作对象只能是基本数据类型,实际上,对于很多用户自定义类型,也需要有类似的运算操作,这就提出了对运算符进行重新定义,赋予已有符号新功能的要求。 不能重载的运算符是: (1) 成员访问运算符. (2) 作用域运算符∷ (3) 条件运算符?: (4) 成员指针运算符* (5) 编译预处理命令的开始符号# 2. 运算符重载的规则 ⑴ C++中的运算符除了少数几个以外,几乎全部可以重载,程序员不能定义新的运算符,只能重载已有的这些运算符。 ⑵ 重载之后运算符的优先级和结合性都不能改变。 ⑶ 运算符重载是针对新类型数据的实际需要,对原有运算符进行适当的改造。一般来讲,重载的功能应当与原有功能相类似,不能改变原运算符所需操作数的个数,同时至少要有一个操作数是自定义类型。 总之,当C++语言原有的一个运算符被重载之后,它原先所具有的语义并没有消失,只相当于针对一个特定的类定义了一个新的运算符。 3. 运算符重载的形式 运算符重载可以使用成员函数和友元函数两种形式。可以参考以下的经验: (1)只能使用成员函数重载的运算符有:=、()、[]、-、new、delete。 (2)单目运算符最好重载为成员函数。 (3) 对于复合的赋值运算符如+=、-=、*=、/=、=、!=、~=、%=、=、=建议重载为成员函数。 (4) 对于其它运算符,建议重载为友元函数。 除了赋值运算符外,其它运算符函数都可以由派生类继承,并且派生类还可有选择地重载自己所需要的运算符(包括基类重载的运算符)。 运算符重载的实质就是函数重载。 6.1.2 用成员函数(运算符函数)重载运算符 type operator @ (参数表) 若运算符是一元的,则参数表为空,此时当前对象作为此运算符的单操作数;若运算符是二元的,则参数表中有一个操作数,此时当前对象作为此运算符的左操作数,参数表中的操作数作为此运算符的右操作数,依此类推。 运算符函数的定义方式同一般成员函数,对类成员的访问与一般成员函数相同,定义如下: type 类名::operator @(参数表) { // 运算符处理程序代码 } 重载运算符的使用方法同原运算符一样,只是它的操作数一定要是定义它的特定类的对象。 例题 【例6.1】用成员函数重载运算符一 【例6.2】用成员函数重载运算符二 6.1.3 用友元函数重载运算符 friend type operator @(参数表); 注意友元函数不属于任何类,它没有this指针,这与成员函数完全不同。若运算符是一元的,则参数表中有一个操作数;若运算符是二元的,则参数表中有两个操作数。也就是说在用友元定义重载运算符时,所有的操作数均需要用参数来传递。友元运算符函数与成员运算符函数的主要区别在其参数个数不同。当运算符的左操作数是一个常数时,就不能利用this指针,应当用友元函数重载。 友元运算符函数的定义如下: type operator @ (参数表) { // 运算符处理程序代码 } 例题 【例6.3】用友元函数重载运算符一 【例6.4】用友元函数重载运算符实现两字符串加法 参看教材的说明 【例6.5】用重载运算符的方法进行复数运算 6.1.4 几个常用运算符的重载 1.运算符!和[]的重载 【例6.6】运算符!和[]的重载 2.前自增和后自增运算符++的重载 前自增运算符++和后自增运算符++重载的语法 函数类型operator++(); //前 函数类型operator++(int); //后 【例6.7】用成员函数重载前自增和后自增运算符。 【例6.8】用友元重载前自增和后自增 3.运算符-的重载 -运算符是成员访问运算符,这种一元的运算符只能被重载为成员函数,成员访问运算符-函数重载的一般形式为: 【例6.9】重载-运算符。 4.赋值运算符=的重载 在正常的情况下,系统会为每一个类自动生成一个默认的完成上述功能的赋值运算符,当然,这种赋值只限于同一个类类型说明的对象之间赋值,相当于浅拷贝构造函数。 【例6.10】赋值运算符的重载一。 【例6.11】赋值运算符的重载二。 【例6.12】赋值运算符的重载三。 5.逗号运算符,的重载 逗号运算符是双目运算符,和其他运算符一样,也可以通过重载逗号运算符来完成期望完成的工作。逗号运算符构成的表

文档评论(0)

jiayou10 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

版权声明书
用户编号:8133070117000003

1亿VIP精品文档

相关文档