(中职)编程语言基础-C++模块10教学课件_第1页
(中职)编程语言基础-C++模块10教学课件_第2页
(中职)编程语言基础-C++模块10教学课件_第3页
(中职)编程语言基础-C++模块10教学课件_第4页
(中职)编程语言基础-C++模块10教学课件_第5页
已阅读5页,还剩42页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、YCF正版可修改PPT(中职)编程语言基础-C+模块10教学课件模块10运算符重载任务1运算符重载的定义任务2运算符重载规则任务3运算符重载的两种形式任务4特殊运算符重载举例返回任务1运算符重载的定义重载是面向对象设计的重要特征,运算符重载是对已有的运算符赋予多重含义,使用同一个运算符作用于不同类型的数据导致不同的行为。C+中经重载后的运算符能直接对用户自定义的数据进行操作运算,这就是C+语言中的运算符重载所提供的功能。运算符重载进一步提高了面向对象的灵活性、可扩充性和可读性。下一页返回任务1运算符重载的定义上一页下一页返回任务1运算符重载的定义对于上述的复数类的两个对象one和two,不能直

2、接用“one + two”来表示两个复数的相加。但为了符合人们的习惯,有时希望对于新的数据类型仍然使用已有的一些运算符进行操作,如果希望用“+”来表示两个复数的加法,这就需要对运算符“+”进行重载。 上一页下一页返回任务1运算符重载的定义操作符是系统预先定义好的一些函数名称,所以,可以把运算符重载看作是函数重载的一种特殊形式,对于运算符的重载和函数的重载是类似的,都是使同一个名称具有多重含义,它体现了面向对象的程序设计的多态性。 只有类的成员函数和类的友元函数才能够访问类的私有数据成员,因此只有将运算符重载为类的成员函数或是类的友元函数时,才能使被重载的运算符能够对新的数据类型进行操作。上一页

3、返回任务2运算符重载规则在对运算符进行重载时要遵循以下一些规则。(1)被重载的运算符一定不能是下面这些运算符中的任意一个:“.” 类成员运算符“*” 指针运算符“:” 类作用域运算符“?:” 条件运算符除此之外,c+的其他运算符都可以重载。下一页返回任务2运算符重载规则 (2)运算符被重载后,不能改变优先级和结合性,也不能改变语法结构,即不能将单日运算符重载为双日运算符。 (3)被重载的运算符必须是系统预先已经定义好的运算符,即不能自己定义新的运算符。 (4)被重载的运算符虽然可以用来做任何事情,但是最好还是应使其新的功能与系统预先定义的功能相似,使人容易理解。上一页返回任务3运算符重载的两种

4、形式 重载运算符的日的是:对于有类对象参与的运算,使其表达式看起来像基本类型数据那样一日了然,与我们熟悉的数学表达形式一致。因此,运算符应该被重载为类的成员或友元函数,这样才能直接访问类的私有数据成员。10. 3. 1运算符重载乃成员函数将运算符重载为类的成员函数的格式为:operator下一页返回任务3运算符重载的两种形式【例10 -2】复数类加减运算重载成员函数形式。上一页下一页返回任务3运算符重载的两种形式上一页下一页返回任务3运算符重载的两种形式上一页下一页返回任务3运算符重载的两种形式上一页下一页返回任务3运算符重载的两种形式上一页下一页返回任务3运算符重载的两种形式10. 3. 2

5、运算符重载为友元函数将运算符重载为友元函数的格式为:friend operator【例10 -3】复数类加减法运算重载友元函数形式。上一页下一页返回任务3运算符重载的两种形式上一页下一页返回任务3运算符重载的两种形式上一页下一页返回任务3运算符重载的两种形式上一页下一页返回任务3运算符重载的两种形式运行结果:上一页下一页返回任务3运算符重载的两种形式10. 3. 3两种重载方式讨论从上面的例子可以看出,运算符的两种重载形式都可以实现我们需要的功能,而且主函数中执行运算的表达方式是一样的。但是成员函数和友元函数是不同的。从表面上看,友元函数比成员函数多一个形参,友元函数的参数对应参与运算的操作数

6、。实际上,成员函数所在的对象就是第一个操作数,成员函数如果带参数则是第二个操作数。 虽然有些运算符既可以重载为成员函数,又可以重载为友元函数;但是一般而言,应将一元运算符重载为成员函数,将二元运算符重载为友元函数。如果运算符的第一个操作数为类对象,则运算符可以重载为成员函数。“()”、“”、“一”、“一*”及“=”必须重载为成员函数)上一页下一页返回任务3运算符重载的两种形式如果运算符有一个操作数不是当前类的类型,则运算符应重载为友元函数。例如,要计算(7. 53一cl)的值,其中cl是COmp1ex类对象。 如果利用友元函数重载形式,则该表达式被解释为: operator-(Complex

7、( 7. 53),cl) 这个结果是合法的。在参数传递的过程中,首先调用转换构造函数将7. 53转换为Complex类型。 我们将上面的讨论总结为表10-1上一页返回任务4特殊运算符重载举例10. 4.1 类型转换运算符我们已经知道,类的转换构造函数可以将数据由其他类型转换为当前的类类型。反过来,如果想将数据由当前的类类型转换为其他类型,则需要将类型转换运算符“()”重载为类的成员函数。其声明形式为: 类名:operator Type/类型转换成员函数 该语句声明将数据由当前的类类型转换为Type类型,其中“Type”表示要转换的类型。注意该成员函数没有参数,没有返回类型,但函数体内必须有返回

8、Type类型值的语句,如例10-4。下一页返回任务4特殊运算符重载举例上一页下一页返回任务4特殊运算符重载举例上一页下一页返回任务4特殊运算符重载举例运行结果:3在执行“int( c)”时,实际上是调用对象c的类型转换成员函数即 c. perator int( ) .10. 4. 2复合赋值运算符上一页下一页返回任务4特殊运算符重载举例在第模块4章中已经介绍了赋值运算符的重载方法。假设在类定义中,重载了赋值运算符“=”和加法运算符“+”,那么复合赋值运算符“+=”是不是就可以直接使用呢?答案是否定的。要想使“+=”适用于类对象,必须单独进行重载。对于其他复合赋值运算符一也一样,如例10-5.上

9、一页下一页返回任务4特殊运算符重载举例上一页下一页返回任务4特殊运算符重载举例上一页下一页返回任务4特殊运算符重载举例上一页下一页返回任务4特殊运算符重载举例上一页下一页返回任务4特殊运算符重载举例运行结果: (6. 7,10. 2) 在执行“c1+=c2;时,实际上是以c2为实参,调用对象c1的运算符重载函数,即c1.operator+=(c2);”上一页下一页返回任务4特殊运算符重载举例10. 4. 3 有增和有减运算符自增运算符“+”和自减运算符“-”都有前置和后置两种情况。下面以自增运算符为例,介绍两种情况的重载方法。自减与自增类似,不再赘述。 对于“inta=3;, +a的含义是“a

10、的值先加1再被使用”,。+的含义是“先使用。的原值然后a再加1。重载前置自增和后置自增时,应该保持原来的含义不变。 前置+与后置+重载为成员函数的声明形式分别为:上一页下一页返回任务4特殊运算符重载举例 consL类名&类名:operator + ( ) ;/前置+重载为成员函数的声明形式 consL类名类名:operator + ( int) ; /后置+重载为成员函数的声明形式 C+规定,后置一元运算符重载为成员函数时,带一个int型参数。该参数在函数体内并不使用,其作用只是为了和前置运算符区分开。上一页下一页返回任务4特殊运算符重载举例上一页下一页返回任务4特殊运算符重载举例上一页下一页返回任务4特殊运算符重载举例上一页下一页返回任务4特殊运算符重载举例上一页下一页返回任务4特殊运算符重载举例上一页下一页返回任务4特殊运算符重载举例上一页下一页返回任务4特殊运算符重载举例 在执行“+a”时,实际上是调用对象a的前置自增重载函数即 a. operator + + () ;在执行“b+”时,实际上是调用对象b的后置自增重载函数即 b. operator + + ( 0 ) ,这时应提供一个实参,可以是任意整数。10. 4. 4流提取运算符和流插入运算符 在标准库的istream类中重载了提取(模块1中称作输人)运算符(),在ost

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论