C++ Primer 5th笔记(chap 14 重载运算和类型转换)重载运算概述
生活随笔
收集整理的這篇文章主要介紹了
C++ Primer 5th笔记(chap 14 重载运算和类型转换)重载运算概述
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1. 定義
重載運算是具有特殊名字的函數,它們的名字由關鍵字operator和其后要定義的運算符號組成。
2. 運算符表
2.1 可重載運算符
| 雙目算術運算符 | + (加),-(減),*(乘),/(除),% (取模) |
| 關系運算符 | ==(等于),!= (不等于),< (小于),> (大于>,<=(小于等于),>=(大于等于) |
| 邏輯運算符 | //(邏輯或),&&(邏輯與),!(邏輯非) |
| 單目運算符 | + (正),-(負),*(指針),&(取地址) |
| 自增自減運算符 | ++(自增),–(自減) |
| 位運算符 | / (按位或),& (按位與),~(按位取反),^(按位異或),,<< (左移),>>(右移) |
| 賦值運算符 | =, +=, -=, *=, /= , % = , &=, /(其實是豎著的)=, ^=, <<=, >>= |
| 空間申請與釋放 | new, delete, new[ ] , delete[] |
| 其他運算符 | ()(函數調用),->(成員訪問),,(逗號), |
2.2 不可重載的運算符列表
| . | 成員訪問運算符 |
| ., -> | 成員指針訪問運算符 |
| :: | 域運算符 |
| sizeof | 長度運算符 |
| ?: | 條件運算符 |
| # | 預處理符號 |
3. 重載運算符的設計規則
規則1
- 不能改變內置類型的運算符的含義。
- 只能重載已有的運算符,而不能發明新的運算符號。
- 重載運算符的優先級和結合律跟對應的內置運算符保持一致。
規則2
- 通常情況下,不應該重載逗號,、取地址&、邏輯與&&和邏輯或||運算符。
- 如果類中含有算術運算符或位運算符,則最好也提供對應的復合賦值運算符。
- 如何有==,一般會有!=
- 如果有單序比較,則應該有operator<,同時也應該有> 和其他的。
- 邏輯運算符返回bool,算術運算符返回類類型,賦值運算符和復合賦值運算符返回左側運算對象的一個引用
4. 重載運算符的參數
參數表示運算符的運算對象,對于二元運算符來說,左側運算對象傳遞給第一個參數,右側運算對象傳遞給第二個參數。
eg.
data1 + data2 operator+(data1, data2); data1 += data2; // expression-based ''call'' data1.operator+=(data2); // equivalent call to a member operator function- 除了重載的函數調用運算符operator()之外,其他重載運算符不能含有默認實參。
- 重載運算符函數的參數數量和該運算符作用的運算對象數量一樣多。
- 成員運算符函數的顯式參數數量比運算對象的數量少一個。
5. 設計為成員函數還是普通函數
- 把運算符定義為成員函數時,它的左側運算對象必須是運算符所屬類型的對象。
- 如果一個運算符函數是類的成員函數,則它的第一個運算對象會綁定到隱式的this指針上。
如何選擇將運算符定義為成員函數還是普通函數:
- 賦值=、下標[]、調用()和成員訪問箭頭->運算符必須是成員函數。
- 復合賦值運算符一般是成員函數,但并非必須。
- 改變對象狀態或者與給定類型密切相關的運算符,如遞增、遞減、解引用運算符,通常是成員函數。
- 具有對稱性的運算符可能轉換任意一端的運算對象,如算術、相等性、關系和位運算符,通常是普通函數。
總結
以上是生活随笔為你收集整理的C++ Primer 5th笔记(chap 14 重载运算和类型转换)重载运算概述的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C++ Primer 5th笔记(cha
- 下一篇: C++ Primer 5th笔记(cha