面向?qū)ο蟪绦蛟O(shè)計-運(yùn)算符重載PPT課件_第1頁
面向?qū)ο蟪绦蛟O(shè)計-運(yùn)算符重載PPT課件_第2頁
面向?qū)ο蟪绦蛟O(shè)計-運(yùn)算符重載PPT課件_第3頁
面向?qū)ο蟪绦蛟O(shè)計-運(yùn)算符重載PPT課件_第4頁
面向?qū)ο蟪绦蛟O(shè)計-運(yùn)算符重載PPT課件_第5頁
已閱讀5頁,還剩24頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、主要內(nèi)容 1 運(yùn)算符重載的需要性 2 運(yùn)算符重載 3 運(yùn)算符成員函數(shù)的設(shè)計 4 運(yùn)算符友元函數(shù)的設(shè)計1第1頁/共29頁1 運(yùn)算符重載的需要性2問題舉例問題舉例復(fù)數(shù)的運(yùn)算復(fù)數(shù)的運(yùn)算class Complex /復(fù)數(shù)類復(fù)數(shù)類public:Complex(double r=0.0,double i=0,0)real=r;imag=i; void Display();/顯示復(fù)數(shù)的值顯示復(fù)數(shù)的值private:double real; /實(shí)部實(shí)部double imag; /虛部虛部;uComplex的對象進(jìn)行的對象進(jìn)行“+”“”“-”運(yùn)算的方法:運(yùn)算的方法:重載重載“+”“”“-”運(yùn)算符。運(yùn)算符。第2頁

2、/共29頁2 運(yùn)算符重載p運(yùn)算符重載的是對已有的運(yùn)算符賦予多重涵義p必要性C+C+中預(yù)定義的運(yùn)算符, ,其運(yùn)算對象只能是基本數(shù)據(jù)類型,而不適用于用戶自定義類型p實(shí)現(xiàn)機(jī)制將指定的運(yùn)算表達(dá)式轉(zhuǎn)換為對運(yùn)算符函數(shù)的調(diào)用,運(yùn)算對象轉(zhuǎn)化為運(yùn)算符函數(shù)的實(shí)參。編譯系統(tǒng)對重載運(yùn)算符的選擇,遵循函數(shù)重載的選擇原則。3第3頁/共29頁運(yùn)算符重載的規(guī)則和限制p可以重載C+C+中除下列運(yùn)算符外的所有運(yùn)算符:. : . : .* * .- ?: .- ?:p只能重載C+C+中已有的運(yùn)算符,不能創(chuàng)造新的運(yùn)算符。p運(yùn)算符重載不改變原運(yùn)算符的優(yōu)先級和結(jié)合性。p不能改變操作數(shù)的個數(shù)。p經(jīng)重載的運(yùn)算符,其操作數(shù)中至少應(yīng)該有一個是自

3、定義的類型。4第4頁/共29頁運(yùn)算符重載的兩種形式p重載為類成員函數(shù)p重載為友元函數(shù)5第5頁/共29頁運(yùn)算符函數(shù)p聲明形式函數(shù)類型 operator 運(yùn)算符(形參)u重載為類成員函數(shù)時參數(shù)個數(shù)= =原操作數(shù)個數(shù)-1-1(后置+、-除外)u重載為友元函數(shù)時:參數(shù)個數(shù)= =原操作數(shù)個數(shù)并且至少應(yīng)該有一個自定義類型的形參。6第6頁/共29頁u雙目運(yùn)算符 M M(如“+ +”)u如果要重載 M M 為類的成員函數(shù),使之能實(shí)現(xiàn)表達(dá)式 oprd1 M oprd2,其中,oprd1oprd1為A A類的對象,則M M應(yīng)被重載為A A類的成員函數(shù),形參類型應(yīng)該是oprd2oprd2所屬的類型。u經(jīng) 重 載 后

4、 , 表 達(dá) 式 o p r d 1 M o p r d 2 相 當(dāng) 于 o p r d 1 . o p e r a t o r M(oprd2)73 運(yùn)算符成員函數(shù)的設(shè)計第7頁/共29頁將“+”、“-”運(yùn)算符重載為復(fù)數(shù)類的成員函數(shù)。u規(guī)則: 實(shí)部和虛部分別相加減,并將結(jié)果值返回。u操作數(shù): 兩個操作數(shù)都是復(fù)數(shù)類的對象u返回類型:復(fù)數(shù)類對象8例1第8頁/共29頁9class Complex /復(fù)數(shù)類public:Complex(double r=0.0,double i=0,0)real=r;imag=i; Complex operator +(Complex c2); /運(yùn)算符重載Compl

5、ex operator -(Complex c2);void Display()/顯示復(fù)數(shù)的值 cout“(”real“,”imag“)”endl; private:double real;double imag;第9頁/共29頁10/重載運(yùn)算符成員函數(shù)的實(shí)現(xiàn)Complex Complex :operator +(Complex c2)Complex c;c.real = real + c2.real;c.imag = imag + c2.imag;return Complex(c.real,c.imag);Complex Complex : operator -(Complex c2)Com

6、plex c;c.real = real - c2.real;c.imag = imag - c2.imag;return c;第10頁/共29頁int main()Complex c1(5,4),c2(2,10),c3;cout“c1=”; c1.display();cout“c2=”; c2.display();c3 = c1 - c2; /使用重載運(yùn)算符完成復(fù)數(shù)減法cout“c3=c1-c2=”;c3.display();c3 = c1 + c2; /使用重載運(yùn)算符完成復(fù)數(shù)加法cout“c3=c1+c2=”;c3.display();運(yùn)行結(jié)果:c1=(5,4)c2=(2,10)c3=c1

7、-c2=(3,-6)c3=c1+c2=(7,14)11第11頁/共29頁u前置單目運(yùn)算符 U U(如“+i+i”)u如果要重載 U U 為類的成員函數(shù),使之能實(shí)現(xiàn)表達(dá)式 U oprd,其中,oprdoprd為A A類的對象,則U U應(yīng)被重載為A A類的成員函數(shù),無形參。u經(jīng)重載后,表達(dá)式 U oprd 相當(dāng)于oprd.operator U()123 運(yùn)算符成員函數(shù)的設(shè)計第12頁/共29頁u后置單目運(yùn)算符 +和-(如“i+i+”)u如果要重載 +和- - 為類的成員函數(shù),使之能實(shí)現(xiàn)表達(dá)式 oprd+ 或 oprd- ,其中,oprdoprd為A A類的對象,則+或-應(yīng)被重載為A A類的成員函數(shù),

8、且具有一個intint型的形參(不必寫形參名,僅為了與前置單目運(yùn)算符區(qū)分)。u經(jīng)重載后,表達(dá)式 oprd+ 相當(dāng)于oprd.operator +(0)133 運(yùn)算符成員函數(shù)的設(shè)計第13頁/共29頁將前置“+”和后置“+”運(yùn)算符重載為時鐘類的成員函數(shù)。u前置單目運(yùn)算符,重載函數(shù)沒有形參;對于后置單目運(yùn)算符,重載函數(shù)需要一個整型形參。u操作數(shù):時鐘類的對象u實(shí)現(xiàn)時間增加1秒鐘.14例2第14頁/共29頁15class Clock /復(fù)數(shù)類public:Clock(int newH=0,int newM=0,int newS=0)Hour=newH; Minute=newM; Second=newS

9、;void operator +(); /運(yùn)算符重載void operator +(int);void ShowTime() /顯示復(fù)數(shù)的值 coutHour“:”Minute“:”Second=60)Second = Second - 60;Minute+;if(Minute=60)Minute= Minute-60;Hour+;Hour=Hour%24;cout=60)Second = Second - 60;Minute+;if(Minute=60)Minute= Minute-60;Hour+;Hour=Hour%24;cout“Clock+:”;第17頁/共29頁int main()

10、Clock myClock(12,15,59);cout“First time output:”; myClock.ShowTime();myClock+; /重載運(yùn)算符完成時間加1秒m y C l o c k . S h o w T i m e ( ) ; +myClock; /重載運(yùn)算符完成時間加1秒myClock.ShowTime();運(yùn)行結(jié)果:First time output:12:15:59Clock+:12:16:00+Clock:12:16:0118第18頁/共29頁將“+”、“-”運(yùn)算符重載為復(fù)數(shù)類的成員函數(shù)。u規(guī)則: 實(shí)部和虛部分別加1或減1.u操作數(shù): 一個,復(fù)數(shù)類的對象

11、u返回類型:前置:當(dāng)前對象引用 后置:操作前的對象值19例3第19頁/共29頁20class Complex /復(fù)數(shù)類public:Complex(double r=0.0,double i=0,0)real=r;imag=i; Complex& operator +();Complex operator +(int);void Display()/顯示復(fù)數(shù)的值 cout“(”real“,”imag“)”endl; private:double real;double imag;第20頁/共29頁21/重載運(yùn)算符成員函數(shù)的實(shí)現(xiàn)Complex& Complex :operator

12、 +()real+;imag+;return *this; /返回原對象Complex Complex : operator +(int)Complex temp(real, imag); real+; /原對象值+1 imag+; return temp; /返回原對象的值第21頁/共29頁int main()Complex c1(5,4);coutc1:; c1.display();cout+c1:; (+c1).display();coutc1:; c1.display();coutc1+:; (c1+).display();coutc1:; c1.display();運(yùn)行結(jié)果:c1:(

13、5,4)+c1:(6,5)c1:(6,5)c1+:(6,5)c1:(7,6)22第22頁/共29頁4 運(yùn)算符友元函數(shù)的設(shè)計如果需要重載一個運(yùn)算符,使之能夠用于操作某類對象的私有成員,可以將此運(yùn)算符重載為該類的友元函數(shù)。函數(shù)的形參代表從左至右排列的各個操作數(shù)。后置單目運(yùn)算符+和的重載函數(shù),形參列表要增加一個int,但不必寫形參名。23第23頁/共29頁4 運(yùn)算符友元函數(shù)的設(shè)計雙目運(yùn)算符B重載后,表達(dá)式 oprd1 B oprd2等同于operator B(oprd1,oprd2)前置單目運(yùn)算符B重載后,表達(dá)式 B oprd等同于 operator B(oprd)后置單目運(yùn)算符+和-重載后,表達(dá)式

14、 oprd B等同于 operator B(oprd,0)24第24頁/共29頁將“+”、“-”運(yùn)算符重載為復(fù)數(shù)類的友元函數(shù)。u規(guī)則: 實(shí)部和虛部分別相加減u操作數(shù): 兩個操作數(shù)都是復(fù)數(shù)類的對象25例4第25頁/共29頁26class Complex /復(fù)數(shù)類public: Complex(double r=0.0,double i=0,0) real=r;imag=i; /友元運(yùn)算符函數(shù)聲明 friend Complex operator +(Complex c1, Complex c2); friend Complex operator -(Complex c1, Complex c2);

15、 void Display() /顯示復(fù)數(shù)的值 cout“(”real“,”imag“)”endl; private:double real;double imag;第26頁/共29頁27/重載運(yùn)算符成員函數(shù)的實(shí)現(xiàn)Complex operator +(Complex c1, Complex c2)Complex c;c.real = c1.real + c2.real;c.imag = c1.imag + c2.imag;return c;Complex operator -(Complex c1, Complex c2)Complex c;c.real = c1.real - c2.real;c.imag = c2.imag - c2.imag;return c;第27頁/共29頁int main()Complex c1(5,4),c2(2,10),c3;cout“c1=”;

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論