C++ 運算符重載

1 概念

所謂重載,就是重新賦予新的含義。函數重載就是對一個已有的函數賦予新的含義,使之實現新功能,因此,一個函數名就可以用來代表不同功能的函數,也就是”一名多用”。

運算符也可以重載。實際上,我們已經在不知不覺之中使用了運算符重載。例如,大 家都已習慣於用加法運算符”+”對整數、單精度數和雙精度數進行加法運算,如5+8, 5.8 +3.67等,其實計算機對整數、單精度數和雙精度數的加法操作過程是很不相同的, 但由於C++已經對運算符”+”進行了重載,所以就能適用於int, float, doUble類型的運算。

又如”<<“是C++的位運算中的位移運算符(左移),但在輸出操作中又是與流對 象cout 配合使用的流插入運算符,”>>“也是位移運算符(右移),但在輸入操作中又是與流對象 cin 配合使用的流提取運算符。這就是運算符重載(operator overloading)。C++系統對”<<“和”>>“進行了重載,用戶在不同的場合下使用它們時,作用是不同 的。對”<<“和”>>“的重載處理是放在頭文件stream中的。因此,如果要在程序中用”<< “和”>>”作流插入運算符和流提取運算符,必須在本文件模塊中包含頭文件stream(當然還應當包括”using namespace std“)。

2 運算符重載的限制

重載運算符函數可以對運算符作出新的解釋,但是原有的基本語義不變:
1. 不改變運算符的優先級
2. 不改變運算符的結合性
3. 不改變運算符所需的操作數
4. 不創建新的運算符。

3 運算符重載編程基礎

運算符重載的兩種方法:成員函數或者友元函數重載。
關鍵在於成員函數有this指針,而友元函數沒有this指針。

3.1 定義運算符重載函數名的步驟

全局函數、類成員函數方法實現運算符重載步驟
1)要承認操作符重載是一個函數,寫出函數名稱operator+ ()
2)根據操作數,寫出函數參數
3)根據業務,完善函數返回值(看函數是返回引用 還是指針 元素),及實現函數業務

3.2 友元函數操作符重載

1)友元函數和成員函數選擇方法
 當無法修改左操作數的類時,使用全局函數進行重載
 =, [], ()和->操作符只能通過成員函數進行重載

2)用友元函數 重載 << >>操作符
 istream 和 ostream 是 C++ 的預定義流類
 cin 是 istream 的對象,cout 是 ostream 的對象
 運算符 << 由ostream 重載爲插入操作,用於輸出基本類型數據
 運算符 >> 由 istream 重載爲提取操作,用於輸入基本類型數據
 用友員函數重載 << 和 >> ,輸出和輸入用戶自定義的數據類型

a)用全局函數方法實現 << 操作符
ostream& operator<<(ostream &out, Complex &c1)
{
//out<<”12345,生活真是苦”<

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章