![C++面向?qū)ο蟪绦蛟O(shè)計(jì) 課件第4章_第1頁(yè)](http://file4.renrendoc.com/view/4ba78bfee33d81d272dac8f53844433d/4ba78bfee33d81d272dac8f53844433d1.gif)
![C++面向?qū)ο蟪绦蛟O(shè)計(jì) 課件第4章_第2頁(yè)](http://file4.renrendoc.com/view/4ba78bfee33d81d272dac8f53844433d/4ba78bfee33d81d272dac8f53844433d2.gif)
![C++面向?qū)ο蟪绦蛟O(shè)計(jì) 課件第4章_第3頁(yè)](http://file4.renrendoc.com/view/4ba78bfee33d81d272dac8f53844433d/4ba78bfee33d81d272dac8f53844433d3.gif)
![C++面向?qū)ο蟪绦蛟O(shè)計(jì) 課件第4章_第4頁(yè)](http://file4.renrendoc.com/view/4ba78bfee33d81d272dac8f53844433d/4ba78bfee33d81d272dac8f53844433d4.gif)
![C++面向?qū)ο蟪绦蛟O(shè)計(jì) 課件第4章_第5頁(yè)](http://file4.renrendoc.com/view/4ba78bfee33d81d272dac8f53844433d/4ba78bfee33d81d272dac8f53844433d5.gif)
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
知識(shí)提要了解運(yùn)算符重載的意義及基本規(guī)則掌握兩種運(yùn)算符重載方式的區(qū)別掌握常用運(yùn)算符重載了解類型轉(zhuǎn)換運(yùn)算符p14.1運(yùn)算符重載概念在類中為已有運(yùn)算符賦予新含義的過(guò)程即稱為運(yùn)算符重載。例4-1例4-2p2運(yùn)算符重載的基本格式運(yùn)算符重載的本質(zhì)其實(shí)就是函數(shù)重載,在類中定義一個(gè)運(yùn)算符重載函數(shù),使用被重載的運(yùn)算符時(shí)實(shí)際上就是調(diào)用該函數(shù)。運(yùn)算符重載的一般格式如下:p3類型說(shuō)明符operator運(yùn)算符(參數(shù)列表){
函數(shù)體;//實(shí)現(xiàn)運(yùn)算符功能的代碼}運(yùn)算符重載的基本規(guī)則1.只能重載C++中已有運(yùn)算符,不能虛構(gòu)新運(yùn)算符2.運(yùn)算符重載后不改變運(yùn)算符的優(yōu)先級(jí)順序3.運(yùn)算符重載后不改變運(yùn)算符的結(jié)合性4.運(yùn)算符重載后不改變操作數(shù)的個(gè)數(shù)5.運(yùn)算符重載后不改變運(yùn)算符原有的語(yǔ)義6.運(yùn)算符重載時(shí)操作對(duì)象至少應(yīng)該有一個(gè)是自定義的類對(duì)象(或類對(duì)象的引用)。7.成員訪問運(yùn)算符“.”、成員指針運(yùn)算符“*”、域運(yùn)算符“::”、條件運(yùn)算符“?:”和sizeof運(yùn)算符不能重載p44.2運(yùn)算符重載方式運(yùn)算符重載函數(shù)相對(duì)于類來(lái)說(shuō)有兩種存在方式:(1)重載為類的成員函數(shù);(2)重載為類的友元函數(shù)。p5重載為類的成員函數(shù)雙目運(yùn)算符重載為類的成員函數(shù)時(shí),其調(diào)用的一般格式是:編譯器把它解釋為:p6左操作數(shù)
運(yùn)算符
右操作數(shù);左操作數(shù).operator運(yùn)算符(右操作數(shù));表達(dá)式“s1>=s2”相當(dāng)于s1.operator>=(s2)重載為類的成員函數(shù)單目運(yùn)算符重載為類的成員函數(shù)時(shí),要區(qū)分前置運(yùn)算符與后置運(yùn)算符。前置運(yùn)算符重載函數(shù)沒有參數(shù)。調(diào)用格式如下:
解釋為:
后置運(yùn)算符重載函數(shù)需要帶一個(gè)整型參數(shù):
解釋為:例4-3p7運(yùn)算符
操作數(shù);操作數(shù).operator運(yùn)算符();操作數(shù)
運(yùn)算符;操作數(shù).operator運(yùn)算符(int);重載為類的友元函數(shù)運(yùn)算符的左操作數(shù)如果不是當(dāng)前類的對(duì)象,那么該運(yùn)算符就不能聲明為類的成員函數(shù),只能聲明為類的友元函數(shù)。在類中對(duì)運(yùn)算符重載函數(shù)進(jìn)行友元函數(shù)的聲明格式如下:p8friend類型說(shuō)明符operator運(yùn)算符(參數(shù)列表);重載為類的友元函數(shù)友元函數(shù)不能通過(guò)對(duì)象進(jìn)行調(diào)用,所以運(yùn)算符的操作數(shù)全部作為運(yùn)算符重載函數(shù)的實(shí)參傳遞到運(yùn)算符重載函數(shù)中。雙目運(yùn)算符重載函數(shù)重載為類的友元函數(shù)時(shí)調(diào)用格式為:編譯器把它解釋為:例4-4p9左操作數(shù)
運(yùn)算符
右操作數(shù);operator運(yùn)算符(左操作數(shù),右操作數(shù));重載為成員函數(shù)與友元函數(shù)的探討1.雙目運(yùn)算符通常重載為類的友元函數(shù)2.通常單目運(yùn)算符重載為類的成員函數(shù)3.以下運(yùn)算符必須重載為類的成員函數(shù):賦值運(yùn)算符“=”、下標(biāo)運(yùn)算符“[]”、函數(shù)調(diào)用運(yùn)算符“()”、成員訪問運(yùn)算符“->”。4.以下運(yùn)算符必須重載為類的友元函數(shù):流插入運(yùn)算符“<<”、流提取運(yùn)算符“>>”、類型轉(zhuǎn)換運(yùn)算符。p104.3常用運(yùn)算符的重載輸入輸出運(yùn)算符賦值運(yùn)算符關(guān)系運(yùn)算符下標(biāo)運(yùn)算符函數(shù)調(diào)用運(yùn)算符p11輸入輸出運(yùn)算符的重載I/O標(biāo)準(zhǔn)庫(kù)使用流提取運(yùn)算符“>>”和流插入運(yùn)算符“<<”實(shí)現(xiàn)數(shù)據(jù)的輸入與輸出。如果需要使用“>>”和“<<”實(shí)現(xiàn)自定義類型數(shù)據(jù)的輸入與輸出,必須在自定義類中對(duì)“>>”和“<<”進(jìn)行重載。運(yùn)算符“>>”和“<<”必須重載為類X的友元函數(shù)。p12輸入輸出運(yùn)算符的重載運(yùn)算符“>>”和“<<”重載的語(yǔ)法格式:例4-5函數(shù)返回值為什么是istream&和ostream&?函數(shù)的第一個(gè)參數(shù)為什么使用istream&is和ostream&os而不是直接使用cin和cout?p13istream&operator>>(istream&,自定義類&);ostream&operator<<(ostream&,自定義類&);輸入輸出運(yùn)算符的重載函數(shù)返回值為什么是istream&和ostream&首先,“>>”重載為類的友元函數(shù),那么cin必須作為函數(shù)的第一個(gè)參數(shù),而cin是istream類預(yù)定義的對(duì)象,所以第一個(gè)參數(shù)是istream類引用是合理的。另外,運(yùn)算符“>>”是可以連用的,比如“cin>>a>>b>>c;”“>>”運(yùn)算符是左結(jié)合的,只有表達(dá)式“cin>>a”的結(jié)果仍然是輸入流對(duì)象“cin”才能實(shí)現(xiàn)“>>”連用的效果。p14輸入輸出運(yùn)算符的重載函數(shù)的第一個(gè)參數(shù)為什么使用istream&is和ostream&os而不是直接使用cin和cout目前我們所知的數(shù)據(jù)的輸入都是使用“cin>>”實(shí)現(xiàn)。事實(shí)上,除了通過(guò)標(biāo)準(zhǔn)輸入流對(duì)象cin輸入數(shù)據(jù)之外,還可以通過(guò)輸入文件流對(duì)象輸入數(shù)據(jù)。用istream的引用is既可以通過(guò)標(biāo)準(zhǔn)輸入流對(duì)象cin輸入數(shù)據(jù),還可以使用輸入文件流對(duì)象輸入數(shù)據(jù)。p15賦值運(yùn)算符的重載可以用一個(gè)對(duì)象為另一個(gè)同類對(duì)象賦值,如s1=s2編譯器調(diào)用賦值運(yùn)算符把對(duì)象s2的數(shù)據(jù)成員的值一一對(duì)應(yīng)復(fù)制給s1的數(shù)據(jù)成員如果沒有重載賦值運(yùn)算符“=”,編譯器會(huì)為類提供一個(gè)默認(rèn)的賦值運(yùn)算符,但是它只能實(shí)現(xiàn)“淺復(fù)制”。p16賦值運(yùn)算符的重載如果數(shù)據(jù)成員有指針,并且在創(chuàng)建對(duì)象時(shí)用new運(yùn)算符為對(duì)象的指針申請(qǐng)了內(nèi)存空間,那么編譯器提供的默認(rèn)賦值運(yùn)算符就不能滿足要求了,否則可能出現(xiàn)內(nèi)存泄露或者出現(xiàn)多次delete同一塊內(nèi)存的錯(cuò)誤操作。這時(shí)需要重載賦值運(yùn)算符,以實(shí)現(xiàn)“深賦值”。例4-6p17關(guān)系運(yùn)算符的重載關(guān)系運(yùn)算符用于比較兩個(gè)數(shù)據(jù)的大小,關(guān)系運(yùn)算的結(jié)果是布爾值。C++中有6個(gè)關(guān)系運(yùn)算符:>、>=、<、<=、==、!=在具體應(yīng)用中,關(guān)系運(yùn)算符都要成對(duì)重載。通常,當(dāng)成對(duì)重載關(guān)系運(yùn)算符時(shí),可以把一個(gè)運(yùn)算符的比較工作委托給另外一個(gè)已經(jīng)實(shí)現(xiàn)的運(yùn)算符。例4-7p18下標(biāo)運(yùn)算符的重載重載“[]”運(yùn)算符目的主要有兩個(gè):一是“對(duì)象[下標(biāo)]”使用方法更加符合習(xí)慣;二是在“[]”使用中增加下標(biāo)的越界檢查,使得“[]”運(yùn)算符使用更安全?!癧]”運(yùn)算符只能重載為類的成員函數(shù),“[]”運(yùn)算符重載的一般格式如下例4-8p19類型說(shuō)明符&operator[](參數(shù));參數(shù)有且只有一個(gè),表示下標(biāo)值,通常是整型變量為了使“[]”運(yùn)算符作為左值,函數(shù)返回值一般是引用。函數(shù)調(diào)用運(yùn)算符的重載可以把運(yùn)算符“()”重載到自定義類,使得類對(duì)象可以像調(diào)用函數(shù)一樣使用運(yùn)算符“()”?!?)”稱為函數(shù)調(diào)用運(yùn)算符,而相應(yīng)類對(duì)象可以稱為函數(shù)對(duì)象。運(yùn)算符“()”必須重載為類的成員函數(shù)。例4-9p204.4類的轉(zhuǎn)換對(duì)于標(biāo)準(zhǔn)數(shù)據(jù)類型編譯器能夠完成數(shù)據(jù)類型的轉(zhuǎn)換。那么,如果是自定義數(shù)據(jù)類型又該如何實(shí)現(xiàn)數(shù)據(jù)類型的轉(zhuǎn)換呢?接下來(lái)我們考慮兩個(gè)問題:其它數(shù)據(jù)類型的數(shù)據(jù)能否轉(zhuǎn)換成當(dāng)前類對(duì)象;當(dāng)前類對(duì)象能否轉(zhuǎn)換成其它數(shù)據(jù)類型。p21類型轉(zhuǎn)換構(gòu)造函數(shù)如果構(gòu)造函數(shù)只需要一個(gè)參數(shù),而且不是當(dāng)前類類型的參數(shù),則該構(gòu)造函數(shù)稱為類型轉(zhuǎn)換構(gòu)造函數(shù),因?yàn)樗问缴贤瓿闪藦囊环N其它類型的數(shù)據(jù)轉(zhuǎn)換為當(dāng)前類對(duì)象的操作。例4-10類型轉(zhuǎn)換構(gòu)造函數(shù)的參數(shù)可以是其它任意類型,實(shí)現(xiàn)從參數(shù)類型到自定義類型的轉(zhuǎn)換,只要程序員定義轉(zhuǎn)換規(guī)則且有意義即可p22類型轉(zhuǎn)換函數(shù)如何把一個(gè)自定義類型轉(zhuǎn)換成為其它類型呢?類型轉(zhuǎn)換函數(shù)也稱為類型轉(zhuǎn)換運(yùn)算符重載函數(shù),其語(yǔ)法格式如下:類型說(shuō)明符就是函數(shù)返回值的類型類型轉(zhuǎn)換函數(shù)只能作為類的成員函數(shù)類型轉(zhuǎn)換函數(shù)不需要任何參數(shù)p23operator類型說(shuō)明符();例4-11盡量避免隱式類型轉(zhuǎn)換如果程序員不希望這種類型轉(zhuǎn)換隱式地發(fā)生,只要在類型轉(zhuǎn)換構(gòu)造函數(shù)前加上關(guān)鍵字explicit即可。這時(shí),只允許進(jìn)行強(qiáng)制類型轉(zhuǎn)換而不能進(jìn)行自動(dòng)類型轉(zhuǎn)換。p24explicitTime(int=0);則,Timet=n;//n是個(gè)整數(shù),如n=100是語(yǔ)法錯(cuò)誤,必須改為Timet=Time(n);才是正確的。盡量避免隱式類型轉(zhuǎn)換對(duì)于類型轉(zhuǎn)換函數(shù)也能夠?qū)崿F(xiàn)自動(dòng)類型轉(zhuǎn)換。如果不希望程序進(jìn)行這種自動(dòng)類型轉(zhuǎn)換,可以使用如下兩種方法解決。法1:在類型轉(zhuǎn)換函數(shù)前面加關(guān)鍵字explicit。法2:設(shè)計(jì)一個(gè)與類型轉(zhuǎn)換函數(shù)功能相同的成員函數(shù)(不是類型轉(zhuǎn)換函數(shù)),只有當(dāng)該成員函數(shù)被顯式調(diào)用時(shí)才能完成類型轉(zhuǎn)換。p25inttoInt();//自定義函數(shù),Time轉(zhuǎn)換為intintTime::toInt()//Time轉(zhuǎn)換成int{ returnnHour*3600+nMinute*6
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度房地產(chǎn)個(gè)人借款擔(dān)保合同范本
- 2025年度海洋漁業(yè)資源保護(hù)合作開發(fā)合同
- 2025年度風(fēng)力發(fā)電場(chǎng)建設(shè)安全操作合同
- 貴州2025年貴州省司法廳所屬事業(yè)單位招聘2人筆試歷年參考題庫(kù)附帶答案詳解
- 衢州2025年浙江衢州職業(yè)技術(shù)學(xué)院招聘人員9人筆試歷年參考題庫(kù)附帶答案詳解
- 醫(yī)療文書管理制度
- 新疆維吾爾自治區(qū)克孜勒蘇柯爾克孜自治州九年級(jí)上學(xué)期1月期末語(yǔ)文試題(PDF版含答案)
- 河南2024年河南信陽(yáng)師范大學(xué)招聘專職輔導(dǎo)員30人筆試歷年參考題庫(kù)附帶答案詳解
- 2025年中國(guó)中空導(dǎo)電粒市場(chǎng)調(diào)查研究報(bào)告
- 2025年貢丸串項(xiàng)目可行性研究報(bào)告
- 2024-2025學(xué)年成都高新區(qū)七上數(shù)學(xué)期末考試試卷【含答案】
- 企業(yè)員工食堂管理制度框架
- 【開題報(bào)告】中小學(xué)校鑄牢中華民族共同體意識(shí)教育研究
- 2024-2025學(xué)年云南省大理州七年級(jí)(上)期末英語(yǔ)試卷(含答案)
- 中國(guó)遠(yuǎn)洋海運(yùn)集團(tuán)招聘筆試沖刺題2025
- 《辣椒主要病蟲害》課件
- 2024年煤礦安全生產(chǎn)知識(shí)培訓(xùn)考試必答題庫(kù)及答案(共190題)
- 《法律援助》課件
- 小兒肺炎治療與護(hù)理
- GB/T 36547-2024電化學(xué)儲(chǔ)能電站接入電網(wǎng)技術(shù)規(guī)定
- 育嬰員初級(jí)培訓(xùn)
評(píng)論
0/150
提交評(píng)論