運算子過載知識點總結

2021-09-24 16:44:09 字數 2185 閱讀 6254

本章學習的運算子的過載,作以下總結:

一、從幾個問題來入手:

1.什麼是運算子的過載?

運算子與類的結合,產生新的含義。

2.為什麼要引入運算子過載?

作用:為了實現類的多型性(多型是指乙個函式名有多種含義)。

運算子過載允許c/c++的運算子在使用者定義型別(類)上擁有乙個使用者定義的意義。過載的運算子是函式呼叫的語法修飾:

class fred

public:

#if 0

// 沒有算符過載:

fred add(fred, fred);

fred mul(fred, fred);

fred f(fred a, fred b, fred c)

return add(add(mul(a,b), mul(b,c)), mul(c,a)); 

#else

// 有算符過載:

fred operator+ (fred, fred);

fred operator* (fred, fred);

fred f(fred a, fred b, fred c)

return a*b + b*c + c*a;

#endif

3.怎麼實現運算子的過載?

方式:類的成員函式或友元函式(類外的普通函式)。

規則:不能過載的運算子有 成員運算子 . 和 指標運算子 *和 條件運算子 ?:和 作用域運算子 ::和sizeof。

友元函式和成員函式的使用場合:一般情況下,建議一元運算子使用成員函式,二元運算子使用友元函式。

1)運算子的操作需要修改類物件的狀態,則使用成員函式。如需要做左值運算元的運算子(如=,+=,++)。

2)運算時,有數和物件的混合運算時,必須使用友元。

3)二元運算子中,第乙個運算元為非物件時,必須使用友元函式。如輸入輸出運算子《和》。

4)可以用作過載的運算子:

算術運算子:+,-,*,/,%,++,--;

位操作運算子:&,|,~,^,<<,>>

邏輯運算子:!,&&,||;

比較運算子:<,>,>=,<=,==,!=;

賦值運算子:=,+=,-=,*=,/=,%=,&=,|=,^=,<<=,>>=;

其他運算子:,(),->,,(逗號運算子),new,delete,new,delete,->*。

二、過載運算子的限制:

1.不可臆造新的運算子,必須把過載運算子限制在c++語言中已有的運算子範圍內的允許過載的運算子之中。

2.過載運算子堅持4個「不能改變」:

1)不能改變運算子運算元的個數;

2)不能改變運算子原有的優先順序;

3)不能改變運算子原有的結合性;

4)不能改變運算子原有的語法結構。

三、運算子過載時必須遵循哪些原則:

運算子過載可以使程式更加簡潔,使表示式更加直觀,增加可讀性。但是,運算子過載使用不宜過多,否則會帶來一定的麻煩。

1)過載運算子含義必須清楚。

2)過載運算子不能有二義性。

四、引數和返回值:

1.當引數不會被改變,一般按const引用來傳遞(若是使用成員函式過載,函式也為const)。

2.對於返回數值的決定:

1)若返回值可能出現在「=」左邊,則只能作為左值,返回非const引用。

2)若返回值只能出現在「=」右邊,則只需作為右值,返回const型引用或者const型值。

3)若返回值既可能出現在「=」左邊,又可能出現在右邊,則其返回值須作為左值,返回非const引用。

五、另外:

1.雙目運算子的過載:

過載運算子函式名:operator@(參數列)

隱式呼叫形式:obj1+obj2

顯式呼叫形式:obj1.operator+(obj obj2)---成員函式

operator+(obj obj1,obj obj2)---友元函式

執行時,隱式呼叫形式和顯式呼叫形式都會呼叫函式operator+()

2.1)a++

函式返回:temp(臨時變數)

函式返回是否是const型別:返回是乙個拷貝後的臨時變數),不能出現在等號的左邊(臨時變數不能做左值),函式的結果只能做右值,則要返回乙個const型別的值

2)++a

函式返回:*this;

函式返回是否是const型別:返回原狀態的本身,返回值可以做左值,即函式的結果可以做左值,則要返回乙個非const型別的值

c 運算子過載 常用運算子 知識點

先給出一段 具體函式內容會在下面給出 class person bool operator person p 過載 bool operator person p 過載 person operator 前置 過載 person operator int 後置 過載 friend ostream ope...

C 關於運算子過載知識點

1 除了類屬關係運算子 成員指標運算子 作用域運算子 sizeof運算子和三目運算子 以外,c 中的所有運算子都可以過載。2 過載運算子限制在c 語言中已有的運算子範圍內的允許過載的運算子之中,不能建立新的運算子。3 運算子過載實質上是函式過載,因此編譯程式對運算子過載的選擇,遵循函式過載的選擇原則...

運算子過載知識總結

1.運算子過載 1 過載規則 2 過載運算子的限制 過載運算子函式可以對運算子作出新的解釋,但原有基本語義不變 不改變運算子的優先順序 不改變運算子的結合性 不改變運算子所需要的運算元 不能建立新的運算子 3 運算子函式可以過載為成員函式或友元函式 1 一元運算子 object op或 opobje...