C--与面向对象程序设计解析课件

上传人:20****08 文档编号:241293732 上传时间:2024-06-15 格式:PPT 页数:101 大小:557.03KB
返回 下载 相关 举报
C--与面向对象程序设计解析课件_第1页
第1页 / 共101页
C--与面向对象程序设计解析课件_第2页
第2页 / 共101页
C--与面向对象程序设计解析课件_第3页
第3页 / 共101页
点击查看更多>>
资源描述
运算符重载运算符重载operator overloading张 俊2006-11-26/15/20241C+与面向对象程序设计运算符重载operator overloading张 主要内容和教学要求主要内容和教学要求掌握常用运算符的重载理解运算符重载的两种形式6/15/20242C+与面向对象程序设计主要内容和教学要求掌握常用运算符的重载8/9/20232C为什么要重载运算符为什么要重载运算符应用系统的运算符集;为自定义类型提供简洁的表达式;Complex a,b,c;不重载运算符:a.Print();c=Add(a,b);重载运算符:cout a b;c=a+b;cout =!=赋值运算符:=+=-=*=/=I/O运算符 :一元运算符:()!-6/15/202411C+与面向对象程序设计不可重载和经常重载的运算符不允许重载的运算符8/9/202运算符重载的形式运算符重载的形式成员函数形式:运算符函数作为类的成员非成员函数形式:l友元l外部函数(全局函数)6/15/202412C+与面向对象程序设计运算符重载的形式成员函数形式:运算符函数作为类的成员8/9Complex类详解6/15/202413C+与面向对象程序设计Complex类详解8/9/202313C+与面向对象程序数据成员及构造函数数据成员及构造函数6/15/202414C+与面向对象程序设计数据成员及构造函数8/9/202314C+与面向对象程序设赋值运算符赋值运算符成员函数原型成员函数原型成员函数定义成员函数定义成员函数调用成员函数调用6/15/202415C+与面向对象程序设计赋值运算符成员函数原型成员函数定义成员函数调用8/9/202算术运算符的重载算术运算符的重载成员函数原型成员函数原型思考:为什么只有一个加数?6/15/202416C+与面向对象程序设计算术运算符的重载成员函数原型思考:为什么只有一个加数?8/9加法运算符的实现及调用加法运算符的实现及调用成员函数定义成员函数定义成员函数调用成员函数调用6/15/202417C+与面向对象程序设计加法运算符的实现及调用成员函数定义成员函数调用8/9/2026/15/202418C+与面向对象程序设计8/9/202318C+与面向对象程序设计复合运算的运算符复合运算的运算符成员函数定义成员函数定义成员函数原型成员函数原型6/15/202419C+与面向对象程序设计复合运算的运算符成员函数定义成员函数原型8/9/202319成员函数定义成员函数定义成员函数调用成员函数调用6/15/202420C+与面向对象程序设计成员函数定义成员函数调用8/9/202320C+与面向对象一元运算符的重载一元运算符的重载成员函数原型成员函数原型成员函数定义成员函数定义成员函数调用成员函数调用6/15/202421C+与面向对象程序设计一元运算符的重载成员函数原型成员函数定义成员函数调用8/9/成员函数形式的特点成员函数形式的特点函数定义:作为类的成员函数。函数参数:二元运算符只带一个参数,一元运算符不带参数。函数调用:当前对象作为左操作数,函数参数作为右操作数。a.operator+(b)语法比较晦涩,不易理解6/15/202422C+与面向对象程序设计成员函数形式的特点函数定义:作为类的成员函数。8/9/202友元函数形式的重载友元函数形式的重载友元函数定义友元函数定义友元函数原型友元函数原型友元函数调用友元函数调用6/15/202423C+与面向对象程序设计友元函数形式的重载友元函数定义友元函数原型友元函数调用8/9友元函数形式的重载友元函数形式的重载6/15/202424C+与面向对象程序设计友元函数形式的重载8/9/202324C+与面向对象程序设友元函数形式的特点友元函数形式的特点函数定义:作为类的友元函数函数参数:二元运算符带两个参数,一元运算符带一个参数函数调用:两个对象都作为函数的参数 operator+(a,b);是几元运算符就带几个操作数,语法符合习惯,易懂,但少用。6/15/202425C+与面向对象程序设计友元函数形式的特点函数定义:作为类的友元函数8/9/2023成员函数形式遇到的问题成员函数形式遇到的问题当运算符的左操作数不是该类的对象时,出现问题。如 Complex a,b;重载:operator+(const Complex&r)a=3+b;3不是Complex的对象,不能调用上述重载的运算符。因而不能计算。6/15/202426C+与面向对象程序设计成员函数形式遇到的问题当运算符的左操作数不是该类的对象时,友元函数形式的另一类用法友元函数形式的另一类用法成员函数原型成员函数原型成员函数定义成员函数定义成员函数调用成员函数调用6/15/202427C+与面向对象程序设计友元函数形式的另一类用法成员函数原型成员函数定义成员函数调用流插入符和提取符的重载流插入符和提取符的重载cin a b;cout a a b;8/9/6/15/202429C+与面向对象程序设计8/9/202329C+与面向对象程序设计请分析下列运算符重载的形式请分析下列运算符重载的形式T为自定义类型,并设下列运算符都有意义。1T a,b c;int x;2cin a b c;cout a b c;3a=b;4c=b+a;c=b x;5c=x+a;c=x b;6/15/202430C+与面向对象程序设计请分析下列运算符重载的形式T为自定义类型,并设下列运算符都有String类详解类详解自课本自课本P311开始开始6/15/202431C+与面向对象程序设计String类详解自课本P311开始8/9/202331C6/15/202432C+与面向对象程序设计8/9/202332C+与面向对象程序设计逻辑非运算符逻辑非运算符友元函数的形式请参考P3136/15/202433C+与面向对象程序设计逻辑非运算符友元函数的形式请参考P3138/9/202333重载流插入和提取运算符重载流插入和提取运算符6/15/202434C+与面向对象程序设计重载流插入和提取运算符8/9/202334C+与面向对象程流插入符调用分析流插入符调用分析6/15/202435C+与面向对象程序设计流插入符调用分析8/9/202335C+与面向对象程序设计复制构造函数复制构造函数6/15/202436C+与面向对象程序设计复制构造函数8/9/202336C+与面向对象程序设计赋值运算符赋值运算符6/15/202437C+与面向对象程序设计赋值运算符8/9/202337C+与面向对象程序设计字符串连接字符串连接“+、+=”6/15/202438C+与面向对象程序设计字符串连接“+、+=”8/9/202338C+与面向对象转换运算符转换运算符有什么样的转换构造有什么样的转换构造函数,就应该提供什函数,就应该提供什么样的转换运算符么样的转换运算符数据类型转换数据类型转换算术运算算术运算赋值赋值实参传给形参实参传给形参返回值返回值6/15/202439C+与面向对象程序设计转换运算符有什么样的转换构造函数,就应该提供什么样的转换运算Rational类详解类详解6/15/202440C+与面向对象程序设计Rational类详解8/9/202340C+与面向对象程6/15/202441C+与面向对象程序设计8/9/202341C+与面向对象程序设计求两个数的最大公约数6/15/202442C+与面向对象程序设计求两个数的最大公约数8/9/202342C+与面向对象程序求两个数的最小公倍数求两个数的最小公倍数6/15/202443C+与面向对象程序设计求两个数的最小公倍数8/9/202343C+与面向对象程序对分数进行标准化对分数进行标准化6/15/202444C+与面向对象程序设计对分数进行标准化8/9/202344C+与面向对象程序设计各种构造函数6/15/202445C+与面向对象程序设计各种构造函数8/9/202345C+与面向对象程序设计复制构造函数复制构造函数6/15/202446C+与面向对象程序设计复制构造函数8/9/202346C+与面向对象程序设计成员函数形式成员函数形式的重载的重载6/15/202447C+与面向对象程序设计成员函数形式的重载8/9/202347C+与面向对象程序赋值运算符的重载赋值运算符的重载6/15/202448C+与面向对象程序设计赋值运算符的重载8/9/202348C+与面向对象程序设计算术运算符的重载算术运算符的重载6/15/202449C+与面向对象程序设计算术运算符的重载8/9/202349C+与面向对象程序设计6/15/202450C+与面向对象程序设计8/9/202350C+与面向对象程序设计复合运算符复合运算符6/15/202451C+与面向对象程序设计复合运算符8/9/202351C+与面向对象程序设计关系运算符关系运算符6/15/202452C+与面向对象程序设计关系运算符8/9/202352C+与面向对象程序设计6/15/202453C+与面向对象程序设计8/9/202353C+与面向对象程序设计6/15/202454C+与面向对象程序设计8/9/202354C+与面向对象程序设计6/15/202455C+与面向对象程序设计8/9/202355C+与面向对象程序设计6/15/202456C+与面向对象程序设计8/9/202356C+与面向对象程序设计6/15/202457C+与面向对象程序设计8/9/202357C+与面向对象程序设计6/15/202458C+与面向对象程序设计8/9/202358C+与面向对象程序设计成员函数形式的特点成员函数形式的特点运算符重载函数作为类的成员函数。二元运算符重载函数只带一个参数,因为另外一个参数隐含为this。operator+(Complex*this,const Complex&);一元运算符重载函数不带参数。6/15/202459C+与面向对象程序设计成员函数形式的特点运算符重载函数作为类的成员函数。8/9/友元函数形式友元函数形式的重载的重载6/15/202460C+与面向对象程序设计友元函数形式的重载8/9/202360C+与面向对象程序6/15/202461C+与面向对象程序设计8/9/202361C+与面向对象程序设计6/15/202462C+与面向对象程序设计8/9/202362C+与面向对象程序设计6/15/202463C+与面向对象程序设计8/9/202363C+与面向对象程序设计6/15/202464C+与面向对象程序设计8/9/202364C+与面向对象程序设计6/15/202465C+与面向对象程序设计8/9/202365C+与面向对象程序设计6/15/202466C+与面向对象程序设计8/9/202366C+与面向对象程序设计6/15/202467C+与面向对象程序设计8/9/202367C+与面向对象程序设计请完成其定义请完成其定义6/15/202468C+与面向对象程序设计请完成其定义8/9/202368C+与面向对象程序设计重载重载6/15/202469C+与面向对象程序设计重载8/9/202369C+与面向对象程序设计合乎习惯的重载形式合乎习惯的重载形式重载二元运算符时带两个参数,较好理解;书写简单:无需类名和二元作用域运算符。6/15/202473C+与面向对象程序设计合乎习惯的重载形式重载二元运算符时带两个参数,较好理解;8两种形式的选择时机两种形式的选择时机左操作数(或者只有左操作数时)是本类的对象(引用)时,必须选用成员函数形式。左操作数不是本类的对象,必须采用非成员函数的形式,一般是友元函数。运算符函数不是类的成员函数,但是要访问类的保护或者私有成员时,也可以采用友元函数形式。6/15/202474C+与面向对象程序设计两种形式的选择时机左操作数(或者只有左操作数时)是本类的对小结小结1两种形式两种形式二元运算符以成员函数的形式重载时,只带一个参数,以友元函数形式重载时,有两个参数。重载(),-和任何赋值运算符时,必须采用成员函数形式。6/15/202475C+与面向对象程序设计小结1两种形式二元运算符以成员函数的形式重载时,只带一个小结小结2两种形式两种形式单目运算符最好被重载为成员函数;具有可交换性的双目运算符最好两种形式都有(成员函数时适用左操作数为本类对象,友元函数时适用左操作数为其他类的对象)。尽量重用已有的操作和运算符。6/15/202476C+与面向对象程序设计小结2两种形式单目运算符最好被重载为成员函数;8/9/2前增量运算符的重载前增量运算符的重载Rational r(1,2);+r;6/15/202479C+与面向对象程序设计前增量运算符的重载Rational r(1,2);8/9/后增量运算符的重载后增量运算符的重载Rational r(-1,5);r+;6/15/202480C+与面向对象程序设计后增量运算符的重载Rational r(-1,5);8/96/15/202481C+与面向对象程序设计8/9/202381C+与面向对象程序设计前增量与后增量的区别前增量与后增量的区别参数的区别(主要区别)operator+();operator+(int);Rational r;+r;r.operator+();r+;r.operator+(0);/0伪值,仅仅是为了区别前增量和后增量。6/15/202482C+与面向对象程序设计前增量与后增量的区别参数的区别(主要区别)8/9/2023区别之二区别之二返回值的区别:前增量:先修改当前对象,再返回之,因而应该返回引用。后增量:先用临时对象保存当前对象,再修改当前对象,然后返回临时对象,因而返回值。6/15/202483C+与面向对象程序设计区别之二返回值的区别:8/9/202383C+与面向对象6/15/202484C+与面向对象程序设计8/9/202384C+与面向对象程序设计还有两个运算符 ()6/15/202485C+与面向对象程序设计还有两个运算符8/9/202385C+与面向对象程序设计下标运算符的重载下标运算符的重载template Type&Array:operator (int index)assert(index=0&index nSize);return pList index;Array a(10);A20=1;6/15/202486C+与面向对象程序设计下标运算符的重载template 8函数调用运算符函数调用运算符()的重载的重载6/15/202487C+与面向对象程序设计函数调用运算符()的重载8/9/202387C+与面向对象小结小结值返回与引用返回值返回与引用返回引用返回可以成为左值,被赋值、修改或者给其他对象赋值;成员函数引用返回可以连续调用(例如)所有赋值运算符都应该引用返回前增量应该引用返回6/15/202489C+与面向对象程序设计小结值返回与引用返回引用返回可以成为左值,被赋值、修改续上续上下标运算符引用返回可以修改返回的值希望改变当前对象的成员函数可以返回引用(例如+)6/15/202490C+与面向对象程序设计续上下标运算符引用返回可以修改返回的值8/9/202390
展开阅读全文
相关资源
相关搜索

最新文档


当前位置:首页 > 办公文档 > 教学培训


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!