操作符函式及過載(1)

2021-08-04 22:49:35 字數 1047 閱讀 8606

•在特定條件下,編譯器有能力把乙個由運算元和操作符共同組成的表示式,解釋為對乙個全域性或成員函式的呼叫,該全域性或成員函式被稱為操作符函式

•通過定義操作符函式,可以實現針對自定義型別的運算法則,並使之與內建型別一樣參與各種表示式

一.成員函式

•形如l#r的雙目操作符表示式,將被編譯器解釋為

–l.operator# (r) 左運算元是呼叫物件,右運算元是引數物件

–a - b + c  a.operator- (b).operator+ (c)

–a - (b + c) a.operator- (b.operator+ (c))

–a - b * c a.opertor- (b.operator* (c))

二.全域性函式

•形如l#r的雙目操作符表示式,將被編譯器解釋為

–::operator# (l, r) 左運算元是第一引數,右運算元是第二引數

–a - b + c  ::operator+ (::operator- (a, b), c)

–a - (b + c) ::operator- (a, ::operator+ (b, c))

–a - b * c ::operator- (a, ::operator* (b, c))

一.成員函式

•形如#o或o#的單目操作符表示式,將被編譯器解釋為

–o.operator# () 唯一的運算元是呼叫物件

– -a  a.operator- ()

– ++a a.operator++ ()

– a++ a.operator++ (0)

二.全域性函式

•形如#o或o#的單目操作符表示式,將被編譯器解釋為

–::operator# (o) 唯一的運算元是引數物件

– -a  ::operator- (a)

– ++a operator++ (a)

– a++ operator++ (a, 0)

操作符函式及過載(2)

一.運算元與表示式 左右運算元均可為左值或右值 complex lv 1,2 complex const rv 3,4 lv rv rv lv 表示式的值必須是右值 complex a 1,2 b 3,4 c 5,6 a b c 錯誤二.成員函式 常函式以支援右值型左運算元,常引數以支援右值型右運算...

操作符函式及過載(3)

一.運算元與表示式 運算元為左值 complex lv 1,2 complex const rv 3,4 lv rv 錯誤 表示式的值為左值,且為運算元本身 而非副本 complex a 1,2 b 3,4 a a a b b a 二.成員函式 非常函式以支援左值型運算元,非常返回值以支援左值型表示...

操作符函式及過載(4)

常用於在容器型別中以下標方式獲取資料元素 非常容器的元素為左值,常容器的元素為右值 一.函式操作符 如果乙個類過載了函式操作符,那麼該類的物件就可以被當做函式來呼叫,其引數和返回值就是函式操作符函式的引數和返回值 引數的個數 型別以及返回值的型別,沒有限制 唯一可以帶有預設引數的操作符函式 一.解引...