《C++面向对象程序设计导论》-从抽象到编程 课件 06 运算与重载_第1页
《C++面向对象程序设计导论》-从抽象到编程 课件 06 运算与重载_第2页
《C++面向对象程序设计导论》-从抽象到编程 课件 06 运算与重载_第3页
《C++面向对象程序设计导论》-从抽象到编程 课件 06 运算与重载_第4页
《C++面向对象程序设计导论》-从抽象到编程 课件 06 运算与重载_第5页
已阅读5页,还剩31页未读 继续免费阅读

下载本文档

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

文档简介

定义和重载运算《C++面向对象程序设计导论:从抽象到编程》以自然数的基数理论为基础,讨论使用自然数计数的基本原理和方法,以及度量客观事物特征的基本方法。6.1自然数与度量

先使用一一对应关系定义集合之间的等价关系,然后使用集合的等价定义有限集和集合的基数,最后使用有限集的基数定义自然数。6.1.1自然数的定义自然数定义中的概念及其关系在对客观事物计数时,将这些客观事物划分一个集合,根据自然数的定义对这个集合中的元素进行计数。6.1.2对事物计数度量事物的基本原理

量度事物的基本方法是,选用一种适当的度量工具,按照度量工具中的度量单位划分被度量事物,并以度量单位建立被度量事物与度量工具之间的一一对应关系,最终计算被度量事物所包含的度量单位数量。6.1.3度量事物的特征量度事物的基本方法定义和重载运算6.2自然数的运算及其含义运算与重载6.3定义和重载运算本节学习目标能够运用基数理论解释自然数的运算及其含义能够运用基数理论解释定义运算的基本思路能够使用C++重载运算6.2自然数的运算及其含义加法的语法

加法定义:设有两个有限集A、B,并且A∩B=∅,则称集合A∪B的基数c是集合A与B的基数的和,记为c=a+b

其中,a称为被加数,b称为加数,c称为和,求两数之和c的运算+称为加法。6.2自然数的运算及其含义按照面向对象思想,可将自然数封装成一个类“自然数”,然后将实现运算的函数作为类“自然数”的成员函数。6.3定义和重载运算类RMB具有三个属性:元yuan、角jiao、分fen;类RMB具有两个成员函数,分别实现加法和乘法运算。人民币用于度量钱的多少,以元角分的格式表示,并规定了元角分的转换规则。6.3定义和重载运算classRMB{public:RMBoperator+(RMB&b);RMBoperator*(intb);voidprint();RMB(inty,intj,intf);protected:unsignedintyuan;unsignedcharjiao;unsignedcharfen;};RMB

RMB::operator+(RMB&b){

intt1,t2,t3;t1=fen+b.fen;t2=jiao+b.jiao+t1/10;t3=yuan+b.yuan+t2/10;returnRMB(t3,t2%10,t1%10);}RMB

RMB::operator*(intb){inty,j,f;f=fen*b;

j=jiao*b+f/10;y=yuan*b+j/10;returnRMB(y,j%10,f%10);}intmain(){RMBr1(1,2,3),r2(2,3,9);r1.print();r2.print();RMBr3(r1+r2);r3.print();RMBr4(r1*3);r4.print();}【例6.1】6.3定义和重载运算RMBr3(r1+r2)的语义计算r1+r2得到临时RMB对象R使用R构造一个RMB对象r3r1.operator+(r2)RMBr3(R)练习读懂加法和乘法运算的语法和语义读懂类RMB及其运算的语义跟踪调试例6.1示例代码,并使用计算顺序图描述RMBr3(r1+r2)的计算过程,使用时序图描述程序的运行过程。总结及进一步学习6.4重载常用运算进一步学习思维:数学中运算的抽象设计:定义运算的基本方法编码:使用成员函数重载运算调试:重载运算的实现原理6.4重载常用运算6.4.1重载赋值运算重载常用运算6.4.2重载类型转换运算6.4.3重载增量运算符6.4.4重载插入和提取运算学习目标能够运用基数理论解释如何抽象和定义运算能够使用结构化设计方法和编程技术实现运算的语义能够熟练使用C++重载常用的运算6.4.1重载赋值运算T&T::operater=(constT&v);r3=r1+r2;6.4重载常用运算6.4重载常用运算RMB&RMB::operator=(constRMB&v){ yuan=v.yuan; jiao=v.jiao; fen=v.fen;

return*this;}voidmain(){ RMBr1(1,2,3),r2(2,3,9),r3; r3=r1+r2;}【例6.2】6.4.2重载类型转换运算T1::operaterT2();(double)r1;6.4重载常用运算6.4重载常用运算RMB::operatordouble(){ returndouble(yuan+(double)jiao/10+(double)fen/100);}voidmain(){ RMBr1(1,2,3); doubled1=4.56,d2;

d2=(double)r1+d1;}【例6.3】6.4.3重载增量运算符T&operator++();或Toperator++(int);T&operator--();或Toperator--(int);

++r2;或r1++;

6.4重载常用运算6.4重载常用运算【例6.4】RMB&RMB::operator++(){

intc; fen++; c=fen/10; fen%=10; jiao+=c; c=jiao/10; jiao%=10; yuan+=c; return*this;}RMBRMB::operator++(int){

RMBrt(*this); intc; fen++; c=fen/10; fen%=10; jiao+=c; c=jiao/10; jiao%=10; yuan+=c; returnrt;}voidmain(){ RMBr1(1,2,3);RMBr2(1,2,3);

r1++;

++r2;}6.4.4重载插入和提取运算ostream&operator<<(ostream&out,constT&x);istream&operator>>(istream&in,T&x)

cout<<r2;cin>>r1;6.4重载常用运算6.4重载常用运算【例6.5】ostream&operator<<(ostream&out,constRMB&rmb){ out<<rmb.yuan<<"元"<<(int)rmb.jiao<<"角"<<(int)rmb.fen<<"分"; returnout; }istream&operator>>(istream&inp,RMB&rmb){ inty,j,f; inp>>y>>j>>f; rmb.yuan=y;

rmb.jiao=j%10;

rmb.fen=f%10; returninp;}voidmain(){ RMBr1(1,2,3); cout<<r1;}练习读懂常用运算的语法和语义读懂类RMB及其运算的语义参照教材中的示例代码,编程完整实现跟踪调试,并使用计算顺序图描述关键表达式(如r3=r1+r2)的计算过程,使用时序图描述程序的运行过程。总结及进一步学习6.5应用举例:货币进一步学习思维:运算的抽象及其计算方法(计算思维)设计:使用结构化设计方法设计运算的实现算法编码:使用结构化和面向对象编程技术重载常用运算调试:重载运算的内部实现原理应用举例:货币6.5.1基类Currency应用举例:货币6.5.2派生RMB6.5.3派生其他货币学习目标能够综合运用基数理论等数学知识解释如何抽象和定义数据类型及其运算能够综合运用计算机基础知识解释计算机中如何实现数据类型及其运算能够使用C++自定义数据类型并重载其运算应用举例:货币【例6.6】6.5.1基类CurrencyclassCurrency{public: Currency&operator++(); Currencyoperator++(inti); operatordouble(); Currency&operator=(constCurrency&v); Currencyoperator+(Currencyb); Currencyoperator*(intb); Currency(inty,intf); Currency(doubled); Currency(); virtualostream&print(ostream&out); virtualistream&input(istream&inp);protected: unsignedintyuan; unsignedcharfen;};6.5.2派生RMBclassRMB:publicCurrency{public: virtualostream&print(ostream&out); virtualistream&input(istream&inp); RMB(inty,intj,intf); RMB(doubled); RMB();};ostream&RMB::print(ostream&out){ cout<<yuan<<"元"<<(int)fen/10<<"角"<<(int)fen%10<<"分"; returnout;}istream&RMB::input(istream&inp){ inty,j,f;inp>>y>>j>>f; yuan=y+(j*10+f)/100;

fen=(j*10+f)%100; returninp;}RMB::RMB(doubled):Currency(d){}RMB::RMB(inty,intj,intf):Currency(y,j*10+f){}6.5.3派生其他货币练习读懂类图及其运算的语义解释运算的计算方法参照RMB类,编写Euro、Dollar、RUB类的代码,并调试运行。高阶练习阅读6.6R进制计算机,推导其中的数学公式,解释整数运算的计算方法解释上图的设计思路和类图的语义参照教材中的示例代码,编程实现能进行整数运算的R进制计算机提升编程的水平,

温馨提示

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

评论

0/150

提交评论