C 運算子過載

2021-08-31 07:08:00 字數 1958 閱讀 8701

對於條件表示式 a>b ? x : y,先計算條件b,然後進行判斷。如果a>b 的值為true(1),計算x的值,運算結果為x的值;否則,計算y的值,運算結果為y的值。

其中a>b 部分,返回就是

0,1,沒有其他數;

運算子過載的目的:實現類的多型性。

運算子過載的實質:函式過載,每個運算子對應各自的運算子函式,根據運算元的不同呼叫不同的同名函式。

運算子過載語法:運算子的過載是通過對運算子

運算子函式名由關鍵字operate和過載的運算子組成:

型別類名::operate 過載的運算子(引數列表)

操作://……運算子處理程式**

函式的引數個數是由以下兩個因素決定:

該操作符是一元操作符還是二元操作符

當運算子過載為類的成員函式時,函式的引數個數比原有運算元個數要少乙個(後置「++」,「--」除外),也就是說,一元操作符的引數個數為0,二元操作符的引數個數為1;而運算子過載為類的友元函式時,函式的引數個數與原有運算元個數相同(後置「++」,「--」除外),也就是說,一元操作符的引數個數為1,二元運算元的引數個數為2。這是因為,當過載為類的成員函式時,如果某個物件使用過載了成員函式,自身的資料可以直接訪問,就不用再放在函式表中進行傳遞,這樣該類本身也作為乙個操作符參與了計算。

友元函式對某個物件的資料進行操作,就必須通過該物件的名字來進行,因此引數的使用必須進行傳遞,運算元的個數也就不會有所減少變化。

運算子過載規則:

在c++中,除了5個運算子不能重置(「.」,「*指標」,「::」,「?:」,「sizeof」)之外,其餘全部都可以過載。

運算子過載可以改變運算子原來的行為,但是過載之後運算子的優先性,結合性和運算元個數都不會改變,只能過載已有的運算子。

運算子過載後的功能與原有的功能相似,運算子過載函式的引數至少有乙個必須是自定義型別。

在過載運算子「()」,「」,「->」或「=」時,運算子過載函式必須宣告乙個為類的乙個成員,對於其他運算子,運算子過載函式可以是成員函式或者是友元函式。

成員運算子函式:

eg:  classcomplex

public:

complex(floatr=0,float i=0);  // 建構函式

complexoperator+(const complex &op2) const;   //過載運算子 +

complexoperator-(const complex &op2) const;   //過載運算子-

complexoperator*(const complex &op2) const;   //過載運算子*

voiddisplay() const;               // 按數學寫法輸出複數

private:

floatreal;

floatimag;

complex::complex(float r,floati)  // 建構函式

complex complex::operator+(const complex &op2) const    //過載運算子 +

float       r=real+op2.real;

float      i=imag+op2.imag;

returncomplex(r,i);

complex complex::operator-(const complex &op2) const  //過載運算子 -

float       r=real-op2.real;

float      i=imag-op2.imag;

returncomplex(r,i);

complex complex:: operator*(const complex &op2) const    //過載運算子 *

floatr=real*op2.imag-imag*op2.real;

floati=imag*op2.real+real*op2.imag;

returncomplex(r,i);}

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

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

C 運算子過載賦值運算子

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

C 運算子過載轉換運算子

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