版權(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度創(chuàng)意市集攤位租賃合同融合藝術(shù)與生活3篇
- 美發(fā)師燙染知識培訓(xùn)課件
- 生產(chǎn)與安全知識培訓(xùn)課件
- 幼兒園年終工作總結(jié)
- 二零二五年度投資私募股權(quán)投資基金合同3篇
- 二零二五年度光伏發(fā)電項(xiàng)目電氣安裝工程合同3篇
- Unit6 My sweet home Lesson 1 Get ready(說課稿)-2024-2025學(xué)年外研版(三起)(2024)三年級上冊
- 從內(nèi)經(jīng)談冬日養(yǎng)生
- 電瓶車剎車知識培訓(xùn)課件
- 二零二五年度房地產(chǎn)銷售合同標(biāo)的、房產(chǎn)描述與銷售條款協(xié)議3篇
- 《鴻蒙智能互聯(lián)設(shè)備開發(fā)(微課版)》全套教學(xué)課件
- 215kWh工商業(yè)液冷儲能電池一體柜用戶手冊
- 場地平整施工組織設(shè)計-(3)模板
- 交通設(shè)施設(shè)備供貨及技術(shù)支持方案
- 山西省晉中市2023-2024學(xué)年高一上學(xué)期期末考試 物理 含解析
- 項(xiàng)目工程師年終總結(jié)課件
- 一年級口算練習(xí)題大全(可直接打印A4)
- 安全與急救學(xué)習(xí)通超星期末考試答案章節(jié)答案2024年
- 人力資源戰(zhàn)略規(guī)劃地圖
- 2024電力安全工器具及小型施工機(jī)具預(yù)防性試驗(yàn)規(guī)程
- 基于單片機(jī)的2.4G無線通信系統(tǒng)
評論
0/150
提交評論