教你快速理解C++中的運算子過載
在C ++中,我們可以使運算子為使用者定義的類工作。這意味著C ++能夠為運算子提供資料型別的特殊含義,這種能力稱為運算子過載。 |
在C ++中,我們可以使運算子為使用者定義的類工作。這意味著C ++能夠為運算子提供資料型別的特殊含義,這種能力稱為運算子過載。
例如,我們可以在String之類的類中過載運算子'+',以便僅使用+就可以連線兩個字串。 算術運算子可能會過載的其他示例類是複數,小數,大整數等。
#includeusing namespace std; class Complex { private: int real, imag; public: Complex(int r = 0, int i =0) {real = r; imag = i;} Complex operator + (Complex const &obj) { Complex res; res.real = real + obj.real; res.imag = imag + obj.imag; return res; } void print() { cout << real << " + i" << imag << endl; } }; int main() { Complex c1(10, 5), c2(2, 4); Complex c3 = c1 + c2; c3.print(); }
操作員功能與普通功能相同。唯一的區別是,運算子的名稱始終是運算子關鍵字,後跟運算子的符號,並且在使用相應的運算子時會呼叫運算子功能。
以下是全域性運算子功能的示例。
#includeusing namespace std; class Complex { private: int real, imag; public: Complex(int r = 0, int i =0) {real = r; imag = i;} void print() { cout << real << " + i" << imag << endl; } friend Complex operator + (Complex const &, Complex const &); }; Complex operator + (Complex const &c1, Complex const &c2) { return Complex(c1.real + c2.real, c1.imag + c2.imag); } int main() { Complex c1(10, 5), c2(2, 4); Complex c3 = c1 + c2; c3.print(); return 0; }
除了少數操作員之外,幾乎所有操作員都可以過載。以下是不能過載的運算子的列表。
為什麼不能。(點),::,?:和sizeof是否過載?
請參閱此以獲取Stroustrup自己的答案。
1)為了使運算子過載起作用,至少一個運算元必須是使用者定義的類物件。
2) 賦值運算子:編譯器會自動為每個類建立一個預設的賦值運算子。預設賦值運算子確實將右側的所有成員分配到左側,並且在大多數情況下都可以正常工作(此行為與複製建構函式相同)。請參閱此瞭解更多詳情。
3) 轉換運算子:我們還可以編寫可用於將一種型別轉換為另一種型別的轉換運算子。
#includeusing namespace std; class Fraction { int num, den; public: Fraction(int n, int d) { num = n; den = d; } operator float() const { return float(num) / float(den); } }; int main() { Fraction f(2, 5); float val = f; cout << val; return 0; }
過載的轉換運算子必須是成員方法。其他運算子可以是成員方法或全域性方法。
4)任何可以用單個引數呼叫的建構函式都可以用作轉換建構函式,這意味著它也可以用於隱式轉換為正在構造的類。
#includeusing namespace std; class Point { private: int x, y; public: Point(int i = 0, int j = 0) { x = i; y = j; } void print() { cout << endl << " x = " << x << ", y = " << y; } }; int main() { Point t(20, 20); t.print(); t = 30; t.print(); return 0; }
原文地址:
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31559985/viewspace-2740512/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- C++中運算子的過載C++
- C++運算子過載C++
- C++ 運算子過載C++
- C++——運算子過載C++
- [C++]運算子過載C++
- YTU-OJ-實現複數類中的加運算子過載【C++運算子過載】C++
- C++過載的奧義之運算子過載C++
- C++運算子過載詳解C++
- C++ 過載運算子和過載函式C++函式
- 初步C++運算子過載學習筆記<3> 增量遞減運算子過載C++筆記
- C++運算子過載的一些困惑C++
- 中文版 過載箭頭運算子的理解
- 運算子過載
- 過載運算子
- C++學習筆記(二) 運算子過載C++筆記
- 開心檔之C++ 過載運算子和過載函式C++函式
- [Lang] 運算子過載
- C#運算子過載---逐步地分析與理解C#
- C# 運算子過載C#
- 運算子過載筆記筆記
- Python 運算子過載Python
- 優先佇列中過載運算子>和佇列
- C++ 運算子過載講解與經典例項C++
- 從一個加減法運算程式碼理解特殊運算子的過載
- C++中的運算子和表示式C++
- Javascript實現運算子過載JavaScript
- python之運算子過載Python
- 指標運算子過載(* 和 ->)指標
- Python——運算子過載(1)Python
- c++ 運算子過載、執行緒安全實現單例C++執行緒單例
- C++中運算子 &和&&、|和|| 的區別C++
- 瞭解下C# 運算子過載C#
- 深入C++05:運算子過載C++
- 型別轉換 運算子過載型別
- 過載運算子、解構函式函式
- 理解 new 運算子
- C++之【操作符】彙總 &【不能被過載的運算子】小記C++
- C++過載加號運算子實現兩個結構體的相加C++結構體