過載運算子

2021-07-10 03:51:17 字數 1662 閱讀 6115

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.除了類屬關係運算子 成員...