




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、1面向?qū)ο蟪绦蛟O(shè)計(jì)與C+第七章 重載教 師: 王 濤 電 話: 51688243辦公室: 九教北512E-mail: 21 函數(shù)重載 函數(shù)重載: 同一個(gè)域中,兩個(gè)以上的函數(shù)可以取相同的名字,只要參數(shù)表不同即可。 在C語言中: int nplus(int, int);/ 整數(shù)相加 double dplus(double, double);/ 實(shí)數(shù)相加 float fplus(float, float);/ 浮點(diǎn)數(shù)相加 char* cplus(char*, char*);/ 字符串相加3函數(shù)重載 在C+中,可以利用函數(shù)重載使功能相同但參數(shù)表不同的函數(shù)使用相同的名字. 在C+語言中: int plu
2、s(int, int);/ 整數(shù)相加 double plus(double, double);/ 實(shí)數(shù)相加 float plus(float, float);/ 浮點(diǎn)數(shù)相加 char* plus(char*, char*);/ 字符串相加 示例程序:07_01 注意函數(shù)重載與參數(shù)類型轉(zhuǎn)換的區(qū)別4函數(shù)重載 例程07_01的錯(cuò)誤:指針指針動(dòng)態(tài)存儲區(qū)object windows str1str2 修改為 char str1=“ojbect “,str2=“windows”;windowsobject str2str1635.424.5y2x2windowsobject str2str1windows
3、 24.5y2x2plus(str1, str2)之后:5函數(shù)重載 重載的函數(shù)決定調(diào)用哪一個(gè)函數(shù)是在編譯時(shí)根據(jù)參數(shù)表決定的.實(shí)際上是把它們編譯成了不同名的函數(shù)。編譯好的函數(shù)名類似于(各編譯器可能不同):int _plus_int_int (int, int);float _plus_float_float (float, float);double _plus_double_double (double, double);6構(gòu)造函數(shù)重載 類的構(gòu)造函數(shù)可以有多個(gè),其實(shí)是構(gòu)造函數(shù)的重載,根據(jù)創(chuàng)建對象時(shí)的參數(shù)決定調(diào)用哪個(gè)一個(gè)構(gòu)造函數(shù)。 類的析構(gòu)函數(shù)的參數(shù)表必須為空,因此析構(gòu)函數(shù)不能重載。class
4、Aint _value;public: A() _value = 0;A(int value) _value = value;/ ok. A() A(int value)/ error;7類成員函數(shù)重載 類成員函數(shù)重載的原則與普通外部函數(shù)及類構(gòu)造函數(shù)一樣,參數(shù)表不同即可. 不同類的成員函數(shù)名可相同(參數(shù)表也可相同),這種情況不是重載,因?yàn)樗麄儗儆诓煌念愑颉?示例程序07_02(計(jì)時(shí)器程序)82 操作符重載class complex / 復(fù)數(shù)double real;/ 實(shí)數(shù)double virt; / 虛數(shù)/* */ ;complex c1, c2, sum; 若想實(shí)現(xiàn):sum = c1 +
5、c2 ?sum.real = c1.real + c2.real;sum.virt = c1.virt + c2.virt;9方法一:通過定義存取函數(shù)存取函數(shù)class complexdouble real, virt;public: void setReal(double val) real = val; void setVirt(double val) virt = val; double getReal() return real; double getVirt() return virt; ;complex c1, c2, sum;sum.setReal( c1.getReal() +
6、 c2.getReal() );sum.setVirt ( c1.getVirt() + c2.getVirt() );10增加接口 方法二: 增加復(fù)制及加法接口class complexdouble real, virt;public: void Copy(complex& c)/ 復(fù)制數(shù)據(jù)real = c.real; virt = c.virt; void Add(complex& c) / 加法接口real += c.real;virt += c.virt; ;complex c1, c2, sum;sum.Copy( c1);sum.Add( c2 );11操作符重載
7、方法三:重載操作符,讓對象支持=,+操作.class complexdouble real, virt;public: void operator = (const complex& c)real = c.real; virt = c.virt; complex operator + ( complex& c) complex val;val.real = thisreal + c.real;val.virt = thisvirt + c.virt;return val; ;complex c1, c2, sum;sum = c1 + c2; 示例程序07_0312操作符重載
8、C+中大多數(shù)操作符都能被重載,不能被重載的操作符有:. (取成員操作符) : (域操作符) * (解引用操作符) ? : (三元表達(dá)式) sizeof (計(jì)算對象大小) # (宏定義,預(yù)編譯) 重載運(yùn)算符時(shí): 不能改變運(yùn)算符的優(yōu)先級 不能改變運(yùn)算符所需操作數(shù)的數(shù)目132.1 成員函數(shù)重載操作符 在類定義體中聲明運(yùn)算符函數(shù):type operator 運(yùn)算符 (參數(shù)表 ) 用成員函數(shù)重載重載運(yùn)算符,當(dāng)前對象是該運(yùn)算符的第一個(gè)操作數(shù): 一元操作符,參數(shù)表為空(如+,-) 二元操作符,參數(shù)表中有一個(gè)操作數(shù)(如+,-,*,/)14 重載操作符的參數(shù)類型及返回值類型可以與對象類型不同.成員函數(shù)重載操作符
9、class Aint val;public: int operator + (int n)return val + n; ;main()A a1, a2; int n;n = a1 + 10;/ okn = 10 + a1;/ error, 系統(tǒng)缺省 + 不支持n = a1 + a2;/ error, 參數(shù)類型不正確15 同一個(gè)操作符可以被重載多次,只要參數(shù)表不同(不能是:參數(shù)表相同而返回值類型不同).成員函數(shù)重載操作符 示例程序07_04. +,-操作符的重載與+,-,*,/等操作符重載類似,不同的是它們是一元操作符,參數(shù)表中沒有操作數(shù).162.2 用友元重載運(yùn)算符 除了用類的成員重載運(yùn)算符
10、外,還可以用類的友元重載運(yùn)算符:friend type operator 操作符(參數(shù)表); 友元重載運(yùn)算符與類成員函數(shù)重載運(yùn)算符的區(qū)別: 友元是外部函數(shù),沒有this指針,不能把當(dāng)前對象作為第一個(gè)操作數(shù) 友元重載操作符的參數(shù)數(shù)目等于操作符所需的操作數(shù)數(shù)目17class point int x, y;public:point(int vx, int vy)x = vx; y =vy;point operator + (point pt);friend point operator (point p1, point p2);point point:operator + (point p)poin
11、t tp;tp.x = thisx + p.x; tp.y = thisy + p.y;return tp; point operator - (point p1, point p2)point tp;tp.x = p1.x - p2.x ; tp.y = p1.y - p2.y;return tp; point a(10, 10), b(20, 5), c(0, 0);c = a + b; c = a b;用友元重載運(yùn)算符18 使用普通外部函數(shù)也可以重載運(yùn)算符,不同在于它不能訪問類的私有成員. 如果使用成員函數(shù),友元,普通外部函數(shù)重載了相同的操作符(操作數(shù)及類型都相同),會產(chǎn)生“二義性”。
12、示例程序07_05.用友元重載運(yùn)算符19 =(賦值運(yùn)算符)也可以重載,但是只能采用成員函數(shù)重載. 一般情況下,系統(tǒng)會為每個(gè)類生成一個(gè)缺省的賦值運(yùn)算符,實(shí)現(xiàn)成員內(nèi)容賦值. 缺省重載的賦值運(yùn)算符形式:A:operator = (const A&);A a1, a2;a1 = a2;等同于: memcpy (&a1, &a2, sizeof(A); 示例程序: 07_06=的重載20=的重載s1.contentss2.contentsnjtunjtus1.contentss2.contentsnjtunjtus1=s2:未顯式重載=的情況:s1.contentss2.cont
13、entsnjtunjtus1.contentss2.contents已釋放s1=s2:顯式重載=的情況:新內(nèi)存21 若class或struct成員中無指針成員,可以不顯式重載=運(yùn)算符,使用系統(tǒng)缺省重載的=運(yùn)算符. 若class或struct成員中包含非靜態(tài)指針成員,必須顯示重載=運(yùn)算符,重新分配內(nèi)存并進(jìn)行內(nèi)容復(fù)制. 重載的=運(yùn)算符最好使用引用參數(shù),而不應(yīng)該使用指針參數(shù)或?qū)ο髮?shí)參.=重載的建議22和()的重載 (下標(biāo)運(yùn)算符)和()(函數(shù)調(diào)用符)也可以重載,但是只能采用成員函數(shù)重載. 一般需通過修改對象成員,則應(yīng)該返回引用類型。 示例程序07_07.(重載示例)23new和delete重載 程序員如果需要自己管理內(nèi)存分配,可以重載new和delete操作符.對象1對象2對象n系統(tǒng)缺省分配:對象1 對象2對象n程序員管理分配: new和delete的重載方式有兩種: 覆蓋缺省定義的全局方式(一般采用這一種) 針對某一個(gè)類的局部方式24和的重載 可以為自定義類型(struct或class)重載運(yùn)算符“”,實(shí)現(xiàn)自定義類型的輸入輸出. 自定義數(shù)據(jù)類型對“”不能使用成員函數(shù)重載.ostr
溫馨提示
- 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)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025-2030中國銀離子計(jì)行業(yè)市場發(fā)展趨勢與前景展望戰(zhàn)略分析研究報(bào)告
- 2025-2030中國鋁箔包裝行業(yè)市場現(xiàn)狀供需分析及投資評估規(guī)劃分析研究報(bào)告
- 2025-2030中國鋁合金壓鑄脫模劑行業(yè)市場深度調(diào)研及競爭格局與投資研究報(bào)告
- 2025-2030中國鉛白產(chǎn)業(yè)營運(yùn)態(tài)勢及競爭格局研究報(bào)告
- 2025-2030中國鉆機(jī)和油田墊行業(yè)市場現(xiàn)狀供需分析及投資評估規(guī)劃分析研究報(bào)告
- 2025-2030中國鋼琴行業(yè)發(fā)展前景及趨勢預(yù)測研究報(bào)告版
- 提高業(yè)績的投資咨詢工程師試題及答案
- 全媒體運(yùn)營師真題解析與答案
- 學(xué)生中考家長會講話稿(6篇)
- 物流項(xiàng)目實(shí)施管理試題及答案
- 小學(xué)美術(shù)課評分標(biāo)準(zhǔn)
- 全設(shè)備保養(yǎng)維修:設(shè)備點(diǎn)檢、保養(yǎng)、自修、外修制度、事故處理規(guī)定
- (完整版)兒童孤獨(dú)癥評定量表(CARS)
- 物業(yè)公司電梯故障維修登記表
- 【基于STM32智能門鎖系統(tǒng)的設(shè)計(jì)10000字(論文)】
- 全國鐵路工程工程量清單計(jì)價(jià)
- 農(nóng)產(chǎn)品中常見重金屬的危害
- 中國商幫江右商幫內(nèi)容提要
- 養(yǎng)老護(hù)理員職業(yè)技能等級認(rèn)定三級(高級工)理論知識考核試卷
- 上海交大科技成果轉(zhuǎn)移轉(zhuǎn)化實(shí)踐簡版
- 簡單的設(shè)計(jì)合同(3篇)2023年
評論
0/150
提交評論