本章學習的運算子的過載,作以下總結:
一、從幾個問題來入手:
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...