運算子過載是一種形式的c++多型。
在c++中,編譯器有能力把乙個由資料、物件和操作符共同組成的表示式,解釋為對乙個全域性或成員函式的呼叫。該全域性或成員函式被稱為操作符函式,通過重定義操作符函式,可以實現針對自定義型別(結構,類)的運算法則,並使之與內建型別一樣參與各種表示式。
過載運算子可使**看起來更加自然。
要過載運算子,需使用被稱為運算子函式的特殊函式形式:
operator op (argument-list)
可過載的運算子+
-*/%
^&|~=
!=<
>
+=-=
*=/=
%=^=
&=|=
<<
>>
>>=
<<=
==!=
<=
>=
&&||++–
,->*
->
( )[ ]
newdelete
new[ ]
delete[ ]
操作符的分類
運算子過載有兩種方法:
一種是在類中以成員函式定義,則對於單目運算子來說由於類中會預設提供this指標,所以不需要其他引數;第二種是以全域性函式實現,則由於沒有this指標,需要有類作為形參。
設有這樣乙個類
class number
number(int x,int y):x(x),y(y)
~number()
};
作為成員函式時:number& operator ++/-- (void)
number operator ++/-- (int)//int為虛參
作為全域性函式時:
可能會訪問到引數的私有成員,解決方法:
友元的宣告:
friend number& operator ++ (number &num);//前++
friend number operator ++ (number &num,int);//後++
前++/–
number&
operator++
/--(number&
num)//+
+i
後++/–
number
operator++
/--(number
&num,int)//int(虛參)用於區分前++
/--和後
++/-
-
作為成員函式number operator /+-*%|^& (number & that)
注意:原物件的值不變,需要產生乙個臨時的物件儲存值來傳遞
bool
operator > < >= <= == != || && (number & that)
判斷運算子,返回bool值
number & operator += -= *= /= (number& that)
會改變自身的值,應該返回類引用.
全域性函式
number operator + (number& a,number& b)
同樣也需要宣告為友元函式。
輸入、輸出運算子不能過載為成員函式,只能是友元。
//輸出
ostream& operator
<< (ostream& os,number & num)
//輸入
istream& operator >> (istream& is,number & num)
//過載後就可以通過下面語句直接輸入輸出
number n1;
cin >> n1;
cout
<< n1 << endl;
1、不能過載的運算子
:: (作用域限定符)
. (成員訪問運算子)
*(成員指標解引用)
?: (三目運算子)
sizeof (位元組長度運算子)
typeid (型別資訊操作符)
2、運算子的過載改變不了運算子的優先順序
3、無法改變運算子的操作個數
4、無法發明新的運算子
5、過載運算子要注意運算子的一致性,不要改變運算子預設的運算規則
6、運算子的過載是為了方便使用、增強可讀。
C 過載運算子
本文主要講述加號運算子 自增運算子 流提取運算子運 流插入運算子 先給出vector類 class vector 建構函式 vector const vector v 拷貝建構函式 vector operator const vector v 過載 vector operator 過載前置自增運算子...
C 過載運算子
過載的運算子是帶有特殊名稱的函式,函式名是由關鍵字 operator 和其後要過載的運算子符號構成的。與其他函式一樣,過載運算子有乙個返回型別和乙個引數列表。如果我們定義的函式為類的成員函式 box operator const box 如果我們定義的函式為非成員函式,那麼我們需要為每次操作傳遞兩個...
C 過載運算子
1.過載運算子的函式一般格式 函式型別 operator 運算子名稱 形參表 2.過載運算子規則 1 c 不允許使用者自己定義新的運算子,只能對已有的c 運算子進行過載。2 除了類屬關係運算子 成員指標運算子 作用域運算子 sizeof運算子和三目運算子 以外,c 中的所有運算子都可以過載。3 過載...