


下載本文檔
版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、第08講 函數重載和運算符重載C+ 在同一作用域中的某個函數和運算符指定多個定義,分別稱為函數重載和運算符重載。重載 是指一個與之前已經在該作用域內 過的函數或方法具有相同名稱的 , 但是它們的參數列表與定義實現不相同。當我們調用一個重載函數或重載運算符時,編譯器通過把我們所使用的參數類型與定義中的參數類型進行比較,然后選用最合適的。選擇最合適的重載函數或重載運算符的過程, 稱為重載決策。函數重載在同一個作用域內,可以 幾個功能類似的同名函數,但是這些同名函數的參數列表(指參數的個數、類型和順序)必須不同。下面的實例中,同名函數 print() 被用于輸出不同的數據類型:1 #include
2、<iostream>2 using namespace std;34 class printData5 6 public:7 void print(int i)8 9 cout "整數為: " i endl;10 1112 void print(double f)13 14 cout "浮點數為: " f endl;15 16<<<<<<<<<<<<運行結果:運算符重載重載的運算符是帶有特殊名稱的函數,函數名是由關鍵字 operator 和其后要重載的運算符符號 的。與其
3、他函數一樣,重載運算符有一個返回類型和一個參數列表。加法運算符用于把兩個 Box 對象相加,返回最終的 Box 對象。大多數的重載運算符可被定義為普通的非成員函數或者被定義為類成員函數。如果我們定義上面的函數為類的非成員函數,那么我們需要為每次操作傳遞兩個參數,如下所示:下面的實例使用成員函數演示了運算符重載的概念。在這里,對象作為參數進行傳遞, 對象的屬性使用 this 運算符進行 ,如下所示:1 Box operator+(const Box&, const Box&);2 <類型> operator<運算符>(參數一,參數二);1 Box oper
4、ator+(const Box&);2 <類型> operator <運算符>(參數列表);17 void print(char c)18 19 cout "字符串為: " c endl;20 21 ;2223 int main()24 25 printData pd;26 pd.print(5); / 輸出整數27 pd.print(500.263); / 輸出浮點數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) / 計算體積9 10 return length * width * height;11 12 void setLength(double len) / 設置長度13 14 length = len;15 1617 void setWidth(double wid) / 設置寬度18 19 width = wid;20 2122 void setHeight(double hei) / 設
6、置高度23 24 height = hei;25 26 / 重載 + 運算符,用于把兩個 Box 對象相加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>>>運行結果:有哪些可重載的運算符?雙目算術運算符+(加),-(減),*(乘),/(除),%(取余)關系運算符=(等于),!=(不等于),<(小于),>(大于),<=(小于等于),>=(大于等41 int main()42 43 Box Box1; / Box1,類型為 Box44 Box Box2; / Box2,類型為 Box45 Box Box3; / Box3,類型為 Box4647 / Box1 參數設置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 參數設置56 Box2.setLength(20.0);57 Box2.setWidth(20.0);58 Box2.setHeight(20.0);5960 / Box2 的體積61 cout "Box2的體積為: " Box2.getVolume() endl;6263 / 把兩個對象相加,得到 Box3 的體積64 Box3 = Box1 + Box2;65 cout "
9、;Box3的體積為: " Box3.getVolume() endl;6667 return 0;68 <<<<<<<<<<<<<<<<<<有哪些不能重載的運算符?重載負號運算符和小于號運算符:1 #include <iostream>2 using namespace std;34 class CDistance5 6 public:7 CDistance(int i) / 構造函數重載8 9 x = i;10 11 CDistance(int a, int b)
10、 / 構造函數重載12 成員 運算符.成員指針 運算符.*,->*域運算符:長度運算符sizeof條件運算符?:預處理運算符#于)邏輯運算符|(邏輯或),&&(邏輯與),!(邏輯非)單目運算符+ (正),-(負),*(指針),&(取地址)自增自減運算符+(自增),-(自減)位運算符| (按位或),& (按位與),(按位取反),(按位異或),,<< (左移),>> (右移)賦值運算符=,+=,-=,*=,/= ,%=,&=,|=,=,<<=,>>=空間申請與new, delete, new , dele
11、te其他運算符()(函數調用),->(成員 ),,(逗號),(下標)13 y =14 z =a;b;15 1617 CDistance operator () / 重載負號運算符18 19 cout "調用負號運算符重載函數" endl;20 x = x;21 cout "重載負號后的值為:" x endl;22 return CDistance(x);23 2425 bool operator <(const CDistance &d) / 重載小于號運算符26 27 cout "調用小于運算符重載函數" 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); / 創建對象49 d1; / 負號運算符重載50 cout endl;51 d2; / 負號
13、運算符重載52 cout endl;<<<<<<<<<<<<&&=&&<<<<<<<<<<<<<<重載遞增運算符: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() / 輸出時間成員函數18 19 cout hours ":" minutes endl;20 21 Time operator () / 重載前綴遞增運算符 +i22 23 cout "調用前置遞增運算符重載函數" endl;24 minutes; / 對象加125 if (minutes 60)26 27 hours;28 minutes = minutes 60;29 30 return Time(hours, minutes);31 32 Time operato
15、r (int) / 重載后綴遞增運算符 i+33 +>=+<<<<+<<<<<<<<53 CDistance d3(33, 40), d4(10, 30);54 d1 < d2; / 小于號運算符重載5556 return 0;57 C+字符串C+字符串類:1 #include <iostream>2 #include <string>34 using namespace std;534 cout<<"調用后置遞增運算符重載函數"<<endl;
16、35 Time t(hours, minutes); / 保存原始值36 minutes; / 對象加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時間55 t1; / t1加156 t1.PrintT
17、imeFunc(); / 顯示t1時間57 cout endl;58 t2.PrintTimeFunc();59 t3=t2 ; / t2+的結果傳遞給t360 cout "t3的結果為:" / 顯示t3時間61 t3.PrintTimeFunc();62 t2.PrintTimeFunc(); / 顯示t2時間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等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 九年級英語下冊 Unit 13 We're trying to save the earth Section A第1課時(1a-2d)教學設計(新版)人教新目標版
- 人教版七年級上冊生物3.1.1 藻類、苔蘚和蕨類植物教學設計
- 餐前餐中餐后培訓
- 損有余補不足-【2022年暑假預習】云名著《世說新語》之“德行”卷
- 三年級數學上冊 五 四則混合運算第2課時 除法和加、減的混合運算教學設計 西師大版
- 人教部編版五年級上冊10 牛郎織女(一)教案設計
- 肺癌伴腦轉移護理查房
- 電網服務培訓
- 報銷制度培訓
- 2024中國能源建設集團東電三公司社會招聘6人筆試參考題庫附帶答案詳解
- 七版教材中藥學教學內容
- 實驗報告3(PN結工藝制備)
- DB44∕T 1988-2017 廣東終身教育資歷框架等級標準
- 第18章生殖毒性研究
- 巧用EXCEL建立合同管理臺帳并動態管理合同
- 汽車吊接地比壓計算
- 基于單片機的環境監測系統PPT演講
- 三相異步電動機
- 水利水電工程水閘畢業設計
- 溝槽管件尺寸對照表
- AGSt品牌保護程序和表格最新版完整
評論
0/150
提交評論