C 運算子過載

2021-08-20 11:08:26 字數 1341 閱讀 8770

一、概念

賦予已有的運算子多重含義。

二、注意事項

(1)不能過載的運算子名

::.*.?:

(2)必須具有乙個類型別(或列舉型別)運算元

(3)優先順序和結合性是固定的

(4)不再具有短路求值特性

作為」&&」和」||」操作符的運算元表示式,這些表示式在進行求值時,只要最終的結果已經可以確定是真或假,求值過程便告終止,這稱之為短路求值。這是這兩個操作符的乙個重要屬性。

三、大多數都可定義為普通非成員函式或類的成員函式。

(1)一般將算術和關係操作符定義為非成員函式;

將賦值操作符定義為成員。

(2)當操作符定義為非成員時,通常將其設定為所操作類的友元。(因為通常會需要操作類的私有成員)

四、使用

(1)像內建的一樣:

如:cout << a+b << endl;

(2)像普通函式一樣:

如: cout << operator+(a,b ) ;

五、示例(下面只貼出了關鍵**部分)

(1)單目運算子的過載1

operator ++ 作為友元的過載

class a

void disp();

friend a& operator ++ (a&);

};a& operator ++ (a& m)

(2)單目運算子的過載2

operator ++ 作為成員函式的過載

class a

void disp();

a& operator ++ ();

};a& a::operator ++ ()

(3)雙目運算子的過載1

operator + 作為友元的過載

class a

void disp();

friend a operator + (const a &,const a &);

};a operator + (const a& x, const a& y)

(4)雙目運算子的過載2

operator + 作為成員函式的過載

class a

void disp();

a operator + (const a &);

};a a::operator + (const a& x)

C 運算子過載 過載特殊運算子

賦值運算子用於同類物件間的相互賦值。賦值運算子只能被過載為類的非靜態成員函式,不能過載為友元函式和普通函式。對於使用者自定義的類而言,如果沒有過載賦值運算子,那麼c 編譯器會為該類提供乙個預設的過載賦值運算子成員函式。預設賦值運算子的工作方式是按位對拷,將等到右邊物件的非靜態成員拷貝給等號左邊的物件...

C 運算子過載賦值運算子

自定義類的賦值運算子過載函式的作用與內建賦值運算子的作用類似,但是要要注意的是,它與拷貝建構函式與析構函式一樣,要注意深拷貝淺拷貝的問題,在沒有深拷貝淺拷貝的情況下,如果沒有指定預設的賦值運算子過載函式,那麼系統將會自動提供乙個賦值運算子過載函式。賦值運算子過載函式的定義與其它運算子過載函式的定義是...

C 運算子過載轉換運算子

為什麼需要轉換運算子?大家知道對於內建型別的資料我們可以通過強制轉換符的使用來轉換資料,例如 int 2.1f 自定義類也是型別,那麼自定義類的物件在很多情況下也需要支援此操作,c 提供了轉換運算子過載函式 它使得自定義類物件的強轉換成為可能。轉換運算子的生命方式比較特別,方法如下 operator...