《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

提交評論