1.當乙個過載的運算子是成員函式時,this繫結到左側運算物件。成員運算子函式的引數比運算物件的數量少乙個。
非成員函式呼叫等價於:
data1 + data2; //普通表示式
operator+(data1, data2); //等價的函式呼叫
成員函式呼叫等價於:
data1 + data2; //普通表示式
data1.operator+(data2); //等價的函式呼叫
2.選擇作為成員或者非成員
1)賦值(=)、下標()、呼叫(())和成員訪問箭頭(->)運算子必須是成員。
2)復合賦值(+=)一般來說應該是成員,但不是必須。
3)遞增、遞減和解引用一般是成員。
4)具有對稱性的運算子,例如算術、相等性、關係和位運算等,通常應該是普通的非成員函式。
3.過載輸出運算子<<
ostream &operator<<(ostream &os, const data &item)
有以下幾點說明:
1)第乙個引數是非常量ostream物件的引用,常量是因為向流寫入會改變其狀態,引用是因為無法直接複製乙個ostream物件(被禁止複製)。
2)第二個引數是常量引用。
3)返回ostream引用是為了和《一致(cout《注意:輸入輸出運算子必須是非成員函式,否則,其左側運算物件將是類的乙個物件:
data data;
data << cout;
4.過載輸入運算子》
必須處理讀入可能失敗的情況,如果讀入失敗,物件被賦予預設的狀態。
5.算術運算子
data operator+=(const data &lhs, const data &rhs)
6.下標運算子
下標運算子必須是成員函式。
如果乙個類包含下標運算子,則它通常會定義兩個版本:乙個返回普通引用,另乙個是類的常量成員並且返回常量引用。
#include#include #include using namespace std;
class strvec
string & operator(int n)
const string & operator(int n) const
private:
string *element;
};int main()
7.遞增遞減運算子:
class strblobptr
strblobptr& operator++()
strblobptr operator++(int)
};
注意:對於後置來說,在遞增物件之前,先記錄物件的狀態。
8.成員訪問運算子
在迭代器及智慧型指標類中常用到解引用運算子(*)和箭頭運算子(->)
9.函式呼叫運算子
#include #include using namespace std;
class absint
};int main()
過載運算子
題目描述 定義乙個矩形類,資料成員包括左下角和右上角座標,定義的成員函式包括必要的建構函式 輸入座標的函式,實現矩形加法,以及計算並輸出矩形面積的函式。要求使用提示中給出的測試函式並不得改動。兩個矩形相加的規則是 決定矩形的對應座標分別相加,如 左下角 1,2 右上角 3,4 的矩形,與 左下角 2...
過載運算子
include include using namespace std class test test const int a v a test const test t1 v t1.v 以下過載小於號 比較兩個物件的大小 bool operator const test t1 const 比較物件...
過載運算子
過載運算子是c 語言的優點之一,對已有的運算子進行過載,賦予其另一種功能,以適應不同的資料型別。運算子過載的宣告方式是關鍵字operator 相關運算的符號。運算子的過載事實上是在定義函式 返回型別說明 operator 運算子符號 引數列表 運算子的過載要遵循以下規則 1.除了類屬關係運算子 成員...