第08講函數(shù)重載和運(yùn)算符筆記巨菜站_第1頁
第08講函數(shù)重載和運(yùn)算符筆記巨菜站_第2頁
第08講函數(shù)重載和運(yùn)算符筆記巨菜站_第3頁
已閱讀5頁,還剩4頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、第08講 函數(shù)重載和運(yùn)算符重載C+ 在同一作用域中的某個(gè)函數(shù)和運(yùn)算符指定多個(gè)定義,分別稱為函數(shù)重載和運(yùn)算符重載。重載 是指一個(gè)與之前已經(jīng)在該作用域內(nèi) 過的函數(shù)或方法具有相同名稱的 , 但是它們的參數(shù)列表與定義實(shí)現(xiàn)不相同。當(dāng)我們調(diào)用一個(gè)重載函數(shù)或重載運(yùn)算符時(shí),編譯器通過把我們所使用的參數(shù)類型與定義中的參數(shù)類型進(jìn)行比較,然后選用最合適的。選擇最合適的重載函數(shù)或重載運(yùn)算符的過程, 稱為重載決策。函數(shù)重載在同一個(gè)作用域內(nèi),可以 幾個(gè)功能類似的同名函數(shù),但是這些同名函數(shù)的參數(shù)列表(指參數(shù)的個(gè)數(shù)、類型和順序)必須不同。下面的實(shí)例中,同名函數(shù) print() 被用于輸出不同的數(shù)據(jù)類型:1 #include

2、<iostream>2 using namespace std;34 class printData5 6 public:7 void print(int i)8 9 cout "整數(shù)為: " i endl;10 1112 void print(double f)13 14 cout "浮點(diǎn)數(shù)為: " f endl;15 16<<<<<<<<<<<<運(yùn)行結(jié)果:運(yùn)算符重載重載的運(yùn)算符是帶有特殊名稱的函數(shù),函數(shù)名是由關(guān)鍵字 operator 和其后要重載的運(yùn)算符符號(hào) 的。與其

3、他函數(shù)一樣,重載運(yùn)算符有一個(gè)返回類型和一個(gè)參數(shù)列表。加法運(yùn)算符用于把兩個(gè) Box 對(duì)象相加,返回最終的 Box 對(duì)象。大多數(shù)的重載運(yùn)算符可被定義為普通的非成員函數(shù)或者被定義為類成員函數(shù)。如果我們定義上面的函數(shù)為類的非成員函數(shù),那么我們需要為每次操作傳遞兩個(gè)參數(shù),如下所示:下面的實(shí)例使用成員函數(shù)演示了運(yùn)算符重載的概念。在這里,對(duì)象作為參數(shù)進(jìn)行傳遞, 對(duì)象的屬性使用 this 運(yùn)算符進(jìn)行 ,如下所示:1 Box operator+(const Box&, const Box&);2 <類型> operator<運(yùn)算符>(參數(shù)一,參數(shù)二);1 Box oper

4、ator+(const Box&);2 <類型> operator <運(yùn)算符>(參數(shù)列表);17 void print(char c)18 19 cout "字符串為: " c endl;20 21 ;2223 int main()24 25 printData pd;26 pd.print(5); / 輸出整數(shù)27 pd.print(500.263); / 輸出浮點(diǎn)數(shù)28 char c = "Hello C+" / 輸出字符串29 pd.print(c);30 return 0;31 <<<<&l

5、t;<1 #include <iostream>2 using namespace std;34 class Box5 6 public:78 double getVolume(void) / 計(jì)算體積9 10 return length * width * height;11 12 void setLength(double len) / 設(shè)置長度13 14 length = len;15 1617 void setWidth(double wid) / 設(shè)置寬度18 19 width = wid;20 2122 void setHeight(double hei) / 設(shè)

6、置高度23 24 height = hei;25 26 / 重載 + 運(yùn)算符,用于把兩個(gè) Box 對(duì)象相加27 Box operator+(const Box& b)28 29 Box box;30 box.length = this length + b.length;31 box.width = this width + b.width;32 box.height = this height + b.height;33 return box;34 35 private:36 double length; / 長度37 double width; / 寬度38 double heig

7、ht; / 高度39 ;40>>>運(yùn)行結(jié)果:有哪些可重載的運(yùn)算符?雙目算術(shù)運(yùn)算符+(加),-(減),*(乘),/(除),%(取余)關(guān)系運(yùn)算符=(等于),!=(不等于),<(小于),>(大于),<=(小于等于),>=(大于等41 int main()42 43 Box Box1; / Box1,類型為 Box44 Box Box2; / Box2,類型為 Box45 Box Box3; / Box3,類型為 Box4647 / Box1 參數(shù)設(shè)置48 Box1.setLength(10.0);49 Box1.setWidth(10.0);50 Box1.

8、setHeight(10.0);5152 / Box1 的體積53 cout "Box1的體積為: " Box1.getVolume() endl;5455 / Box2 參數(shù)設(shè)置56 Box2.setLength(20.0);57 Box2.setWidth(20.0);58 Box2.setHeight(20.0);5960 / Box2 的體積61 cout "Box2的體積為: " Box2.getVolume() endl;6263 / 把兩個(gè)對(duì)象相加,得到 Box3 的體積64 Box3 = Box1 + Box2;65 cout "

9、;Box3的體積為: " Box3.getVolume() endl;6667 return 0;68 <<<<<<<<<<<<<<<<<<有哪些不能重載的運(yùn)算符?重載負(fù)號(hào)運(yùn)算符和小于號(hào)運(yùn)算符:1 #include <iostream>2 using namespace std;34 class CDistance5 6 public:7 CDistance(int i) / 構(gòu)造函數(shù)重載8 9 x = i;10 11 CDistance(int a, int b)

10、 / 構(gòu)造函數(shù)重載12 成員 運(yùn)算符.成員指針 運(yùn)算符.*,->*域運(yùn)算符:長度運(yùn)算符sizeof條件運(yùn)算符?:預(yù)處理運(yùn)算符#于)邏輯運(yùn)算符|(邏輯或),&&(邏輯與),!(邏輯非)單目運(yùn)算符+ (正),-(負(fù)),*(指針),&(取地址)自增自減運(yùn)算符+(自增),-(自減)位運(yùn)算符| (按位或),& (按位與),(按位取反),(按位異或),,<< (左移),>> (右移)賦值運(yùn)算符=,+=,-=,*=,/= ,%=,&=,|=,=,<<=,>>=空間申請(qǐng)與new, delete, new , dele

11、te其他運(yùn)算符()(函數(shù)調(diào)用),->(成員 ),,(逗號(hào)),(下標(biāo))13 y =14 z =a;b;15 1617 CDistance operator () / 重載負(fù)號(hào)運(yùn)算符18 19 cout "調(diào)用負(fù)號(hào)運(yùn)算符重載函數(shù)" endl;20 x = x;21 cout "重載負(fù)號(hào)后的值為:" x endl;22 return CDistance(x);23 2425 bool operator <(const CDistance &d) / 重載小于號(hào)運(yùn)算符26 27 cout "調(diào)用小于運(yùn)算符重載函數(shù)" end

12、l;28 if (y < d.y) (y d.y z < d.z)29 30 cout "d3 < d2" endl;31 return true;32 33 else34 35 cout "d1 > d2" endl;36 return false;37 38 39 private:40 int x;41 int y;42 int z;43 ;444546 int main()47 48 CDistance d1(10), d2(5); / 創(chuàng)建對(duì)象49 d1; / 負(fù)號(hào)運(yùn)算符重載50 cout endl;51 d2; / 負(fù)號(hào)

13、運(yùn)算符重載52 cout endl;<<<<<<<<<<<<&&=&&<<<<<<<<<<<<<<重載遞增運(yùn)算符:1 #include <iostream>2 using namespace std;34 class Time5 6 public:7 Time()8 9 hours = 0;10 minutes = 0;11 12 Time(int h, int m)13 14 hours = h

14、;15 minutes = m;16 17 void PrintTimeFunc() / 輸出時(shí)間成員函數(shù)18 19 cout hours ":" minutes endl;20 21 Time operator () / 重載前綴遞增運(yùn)算符 +i22 23 cout "調(diào)用前置遞增運(yùn)算符重載函數(shù)" endl;24 minutes; / 對(duì)象加125 if (minutes 60)26 27 hours;28 minutes = minutes 60;29 30 return Time(hours, minutes);31 32 Time operato

15、r (int) / 重載后綴遞增運(yùn)算符 i+33 +>=+<<<<+<<<<<<<<53 CDistance d3(33, 40), d4(10, 30);54 d1 < d2; / 小于號(hào)運(yùn)算符重載5556 return 0;57 C+字符串C+字符串類:1 #include <iostream>2 #include <string>34 using namespace std;534 cout<<"調(diào)用后置遞增運(yùn)算符重載函數(shù)"<<endl;

16、35 Time t(hours, minutes); / 保存原始值36 minutes; / 對(duì)象加137 if (minutes 60)38 39 hours;40 minutes = minutes 60;41 4243 return t;44 45 private:46 int hours; / 0 2347 int minutes; / 0 5948 ;495051 int main()52 53 Time t1(11, 59), t2(10, 50), t3(0, 0);54 t1.PrintTimeFunc(); / 顯示t1時(shí)間55 t1; / t1加156 t1.PrintT

17、imeFunc(); / 顯示t1時(shí)間57 cout endl;58 t2.PrintTimeFunc();59 t3=t2 ; / t2+的結(jié)果傳遞給t360 cout "t3的結(jié)果為:" / 顯示t3時(shí)間61 t3.PrintTimeFunc();62 t2.PrintTimeFunc(); / 顯示t2時(shí)間63 return 0;64 <<+<<+>=+6 int main ()7 8 string str1 = "Hello"9 string str2 = "World"10 string str3;11 int len ;1213 / str1 到 str314 str3 = str1;15 cout "str3 : "

溫馨提示

  • 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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論