C 深度解析 20 操作符過載

2021-10-02 11:29:37 字數 2490 閱讀 3051

如果我們直接使用 「+」 完成複數的加法,要怎麼做呢?

這就要使用操作符的過載功能了,操作符的過載是以函式的方式進行的。本質上是用特殊形式的函式擴充套件操作符的功能。

過載通過 operator 關鍵字定義特殊的函式,可以過載為類的成員函式和非成員函式。

語法:

將操作符過載函式定義為類的成員函式時

// 20-1.cpp

#include

class

complex

intgeta()

intgetb()

complex operator+(

const complex& p)

private

:int a, b;};

intmain()

語法:

將操作符過載函式定義為類的非成員函式需要借助友元的幫助。

//  20-2.cpp

#include

class

complex

intgeta()

intgetb()

friend complex operator

+(complex& p1, complex& p2)

;private

:int a, b;};

complex operator

+(complex& p1, complex& p2)

intmain()

有了上面運算子過載的知識,我們來設計乙個完整的複數類,複數類應該具有的操作有

利用運算子的過載,設計成員函式:

// 預設的引數實現時不需要寫了

double complex::

geta()

double complex::

getb()

double complex::

getmodulus()

complex complex::

operator+(

const complex& c)

complex complex::

operator-(

const complex& c)

complex complex::

operator*(

const complex& c)

complex complex::

operator/(

const complex& c)

bool complex::

operator==(

const complex& c)

bool complex::

operator!=(

const complex& c)

complex& complex::

operator=(

const complex& c)

return

*this

;}

// 20-3.cpp

#include

#include

"complex.h"

intmain()

編譯執行:

$ g++ 20-3.cpp complex.cpp -o 20-3

$ ./20-3

c3.a = 2.000000, c3.b = 4.000000

c4.a = -9.000000, c4.b = 12.000000

c5.a = 3.000000, c5.b = 0.000000

c3 == c6 : 1

c3 != c4 : 1

c2.a = 1.000000, c2.b = 2.000000

注意:

1、通過 operator 關鍵字實現過載

2、過載的本質是通過函式擴充套件操作符的功能

3、全域性函式和成員函式都可以實現對操作符的過載

C 操作符過載

1.作為成員過載 class myclass public myclass operator const myclass d cons friend myclass operator const myclass a1,const myclass a2 關於返回值型別的討論 呼叫者堆疊裡返回乙個物件效...

C 過載操作符

過載操作符 一 過載操作符的定義 1.過載操作符的結構 返回型別 operator 需要過載的操作符 形參列表 注意 形引數目應和運算元數目相同。2.過載操作符的幾條注意事項 1 過載的操作符名不能通過連線其他合法符號來建立任何新的操作符。如 2 過載操作符必須具備至少乙個類型別或列舉型別的運算元。...

c 操作符過載

過載操作符 一 限制 1 不能增加新的操作符 2 有些操作符不能過載,如.物件中的訪問成員 作用域解析操作符 sizeof 三元操作符 3 不能改變操作符的元數,元數是指與操作符相關的引數或運算元個數。比如一元操作符 只能應用於乙個操作符 4 不能改變操作符的優先順序 5 不能重新定義內建型別的操作...