




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、主要內(nèi)容 1 運(yùn)算符重載的需要性 2 運(yùn)算符重載 3 運(yùn)算符成員函數(shù)的設(shè)計(jì) 4 運(yùn)算符友元函數(shù)的設(shè)計(jì)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的對(duì)象進(jìn)行的對(duì)象進(jìn)行“+”“”“-”運(yùn)算的方法:運(yùn)算的方法:重載重載“+”“”“-”運(yùn)算符。運(yùn)算符。第2頁
2、/共29頁2 運(yùn)算符重載p運(yùn)算符重載的是對(duì)已有的運(yùn)算符賦予多重涵義p必要性C+C+中預(yù)定義的運(yùn)算符, ,其運(yùn)算對(duì)象只能是基本數(shù)據(jù)類型,而不適用于用戶自定義類型p實(shí)現(xiàn)機(jī)制將指定的運(yùn)算表達(dá)式轉(zhuǎn)換為對(duì)運(yùn)算符函數(shù)的調(diào)用,運(yùn)算對(duì)象轉(zhuǎn)化為運(yùn)算符函數(shù)的實(shí)參。編譯系統(tǒng)對(duì)重載運(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)算符重載不改變?cè)\(yùn)算符的優(yōu)先級(jí)和結(jié)合性。p不能改變操作數(shù)的個(gè)數(shù)。p經(jīng)重載的運(yùn)算符,其操作數(shù)中至少應(yīng)該有一個(gè)是自
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ù)個(gè)數(shù)= =原操作數(shù)個(gè)數(shù)-1-1(后置+、-除外)u重載為友元函數(shù)時(shí):參數(shù)個(gè)數(shù)= =原操作數(shù)個(gè)數(shù)并且至少應(yīng)該有一個(gè)自定義類型的形參。6第6頁/共29頁u雙目運(yùn)算符 M M(如“+ +”)u如果要重載 M M 為類的成員函數(shù),使之能實(shí)現(xiàn)表達(dá)式 oprd1 M oprd2,其中,oprd1oprd1為A A類的對(duì)象,則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è)計(jì)第7頁/共29頁將“+”、“-”運(yùn)算符重載為復(fù)數(shù)類的成員函數(shù)。u規(guī)則: 實(shí)部和虛部分別相加減,并將結(jié)果值返回。u操作數(shù): 兩個(gè)操作數(shù)都是復(fù)數(shù)類的對(duì)象u返回類型:復(fù)數(shù)類對(duì)象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類的對(duì)象,則U U應(yīng)被重載為A A類的成員函數(shù),無形參。u經(jīng)重載后,表達(dá)式 U oprd 相當(dāng)于oprd.operator U()123 運(yùn)算符成員函數(shù)的設(shè)計(jì)第12頁/共29頁u后置單目運(yùn)算符 +和-(如“i+i+”)u如果要重載 +和- - 為類的成員函數(shù),使之能實(shí)現(xiàn)表達(dá)式 oprd+ 或 oprd- ,其中,oprdoprd為A A類的對(duì)象,則+或-應(yīng)被重載為A A類的成員函數(shù),
8、且具有一個(gè)intint型的形參(不必寫形參名,僅為了與前置單目運(yùn)算符區(qū)分)。u經(jīng)重載后,表達(dá)式 oprd+ 相當(dāng)于oprd.operator +(0)133 運(yùn)算符成員函數(shù)的設(shè)計(jì)第13頁/共29頁將前置“+”和后置“+”運(yùn)算符重載為時(shí)鐘類的成員函數(shù)。u前置單目運(yùn)算符,重載函數(shù)沒有形參;對(duì)于后置單目運(yùn)算符,重載函數(shù)需要一個(gè)整型形參。u操作數(shù):時(shí)鐘類的對(duì)象u實(shí)現(xiàn)時(shí)間增加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)算符完成時(shí)間加1秒m y C l o c k . S h o w T i m e ( ) ; +myClock; /重載運(yùn)算符完成時(shí)間加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ù): 一個(gè),復(fù)數(shù)類的對(duì)象
11、u返回類型:前置:當(dāng)前對(duì)象引用 后置:操作前的對(duì)象值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; /返回原對(duì)象Complex Complex : operator +(int)Complex temp(real, imag); real+; /原對(duì)象值+1 imag+; return temp; /返回原對(duì)象的值第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è)計(jì)如果需要重載一個(gè)運(yùn)算符,使之能夠用于操作某類對(duì)象的私有成員,可以將此運(yùn)算符重載為該類的友元函數(shù)。函數(shù)的形參代表從左至右排列的各個(gè)操作數(shù)。后置單目運(yùn)算符+和的重載函數(shù),形參列表要增加一個(gè)int,但不必寫形參名。23第23頁/共29頁4 運(yùn)算符友元函數(shù)的設(shè)計(jì)雙目運(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ù): 兩個(gè)操作數(shù)都是復(fù)數(shù)類的對(duì)象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等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 農(nóng)村土地買賣合同范本
- 農(nóng)村建筑施工合同范本
- 買賣冬蟲夏草合同范本
- 勘界測(cè)繪合同范例
- 再婚買房合同范本
- 個(gè)體簡易合同范本
- 包工安裝護(hù)欄合同范本
- 單位銷售崗位勞動(dòng)合同范本
- 俱樂部裝修合同范本
- 養(yǎng)殖合作建設(shè)合同范本
- 云南省實(shí)驗(yàn)教材信息技術(shù)三年級(jí)第一冊(cè)第13課PPT課件
- 交際德語教程第二版A1Studio[21] 課后習(xí)題參考答案
- 最新修改 班組安全管理建設(shè)--5831模式通用課件
- 氣割、電氣焊作業(yè)的應(yīng)急救援預(yù)案
- 2018年柴油機(jī)大修工程量單
- 超級(jí)精美PPT模版美國經(jīng)典ppt模板(通用珍藏版2)
- 2022年“葉圣陶杯”全國中學(xué)生新作文大賽專用稿紙
- 中醫(yī)內(nèi)科方歌-八
- 氣動(dòng)控制閥的定義分類及工作原理詳解
- 梯形練字格A4紙打印版
- 對(duì)丁達(dá)爾效應(yīng)的研究
評(píng)論
0/150
提交評(píng)論