運算子過載舉例

2021-05-25 07:03:41 字數 2604 閱讀 1559

運算子過載的函式一般地採用如下兩種形式:成員函式形式和友元函式形式。這兩種形式都可訪問類中的私有成員。 

1. 過載為類的成員函式 

這裡先舉乙個關於給複數運算過載複數的四則運算符的例子。複數由實部和虛部構造,可以定義乙個複數類,然後再在類中過載複數四則運算的運算子。先看以下源**: 

#include <iostream.h> 

class complex

complex(double r, double i)

complex operator +(const complex &c);

complex operator -(const complex &c);

complex operator *(const complex &c);

complex operator /(const complex &c);

friend void print(const complex &c);

private:

double real, imag;

}; inline complex complex::operator +(const complex &c)

inline complex complex::operator -(const complex &c)

inline complex complex::operator *(const complex &c)

inline complex complex::operator /(const complex &c)

void print(const complex &c)

void main() 該

程式的執行結果為: 

c1+c2=6+1i

c1-c2=-2+5i

c1*c2=14+8i

c1/c2=0.45+0.8i

(c1+c2)*(c1-c2)*c2/c1=9.61538+25.2308i

在程式中,類complex定義了4個成員函式作為運算子過載函式。將運算子過載函式說明為類的成員函式格式如下: 

<類名> operator <運算子>(<參數列>) 

其中,operator是定義運算子過載函式的關鍵字。 

程式中出現的表示式: 

c1+c2 

編譯程式將給解釋為: 

c1.operator+(c2) 

其中,c1和c2是complex類的物件。operator+()是運算+的過載函式。 

該運算子過載函式僅有乙個引數c2。可見,當過載為成員函式時,雙目運算子僅有乙個引數。對單目運算子,過載為成員函式時,不能再顯式說明引數。過載為成員函式時,總時隱含了乙個引數,該引數是this指標。this指標是指向呼叫該成員函式物件的指標。 

2. 過載為友元函式 

運算子過載函式還可以為友元函式。當過載友元函式時,將沒有隱含的引數this指標。這樣,對雙目運算子,友元函式有2個引數,對單目運算子,友元函式有乙個引數。但是,有些執行符不能過載為友元函式,它們是:=,(),和->。 

過載為友元函式的運算子過載函式的定義格式如下: 

friend <型別說明符> operator <運算子>(<參數列>)

下面用友元函式**成員函式,過載編寫上述的例子,程式如下: 

#include <iostream.h> 

class complex

complex(double r, double i)

friend complex operator +(const complex &c1, const complex &c2);

friend complex operator -(const complex &c1, const complex &c2);

friend complex operator *(const complex &c1, const complex &c2);

friend complex operator /(const complex &c1, const complex &c2);

friend 

void print(const complex &c);

private:

double real, imag;

}; complex operator +(const complex &c1, const complex &c2)

complex operator -(const complex &c1, const complex &c2)

complex operator *(const complex &c1, const complex &c2)

complex operator /(const complex &c1, const complex &c2)

void print(const complex &c)

void main()

該程式的執行結果與上例相同。前面已講過,對又目運算子,過載為成員函式時,僅乙個引數,另乙個被隱含;過載為友元函式時,有兩個引數,沒有隱含引數。因此,程式中出現的 c1+c2 

編譯程式解釋為: 

operator+(c1, c2) 

呼叫如下函式,進行求值, 

complex operator +(const coplex &c1, const complex &c2) 

運算子過載程式舉例

1.運算子過載介紹 之前的函式過載,允許多個同名不同引數型別的函式 運算子過載允許程式設計師如何使用運算子 如 和 來處理不同型別的資料型別 對於基本資料型別,運算子是可以使用的 對於自定義資料型別 如果為對自定義mystring的運算子 定義,會出現編譯錯誤。當乙個運算子過載時,對於c 將會根據資...

運算子過載之過載型別運算子

普通型別 類型別 呼叫對應的只有乙個引數 引數的型別就是這個普通型別 的建構函式 需求 boy boy1 10000 薪資 建構函式boy int boy boy2 rock 姓名 建構函式boy char 普通型別賦值給類型別其實很簡單,就是專門的對這個賦值的型別定義乙個建構函式。編譯器在執行 的...

運算子過載 賦值運算子的過載

有時候希望賦值運算子兩邊的型別可以不匹配,比如,把乙個int型別變數賦值給乙個complex物件,或把乙個 char 型別的字串賦值給乙個字串物件,此時就需要過載賦值運算子 注意 賦值運算子 只能過載為成員函式 賦值運算子過載例項示例 include include using namespace ...