•在特定條件下,編譯器有能力把乙個由運算元和操作符共同組成的表示式,解釋為對乙個全域性或成員函式的呼叫,該全域性或成員函式被稱為操作符函式
•通過定義操作符函式,可以實現針對自定義型別的運算法則,並使之與內建型別一樣參與各種表示式
一.成員函式
•形如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)
常用於在容器型別中以下標方式獲取資料元素 非常容器的元素為左值,常容器的元素為右值 一.函式操作符 如果乙個類過載了函式操作符,那麼該類的物件就可以被當做函式來呼叫,其引數和返回值就是函式操作符函式的引數和返回值 引數的個數 型別以及返回值的型別,沒有限制 唯一可以帶有預設引數的操作符函式 一.解引...