如果我們直接使用 「+」 完成複數的加法,要怎麼做呢?
這就要使用操作符的過載功能了,操作符的過載是以函式的方式進行的。本質上是用特殊形式的函式擴充套件操作符的功能。
過載通過 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 不能重新定義內建型別的操作...