操作符函式及過載(4)

2021-08-04 22:50:41 字數 1816 閱讀 8021

•常用於在容器型別中以下標方式獲取資料元素

•非常容器的元素為左值,常容器的元素為右值

一.函式操作符

•如果乙個類過載了函式操作符,那麼該類的物件就可以被當做函式來呼叫,其引數和返回值就是函式操作符函式的引數和返回值

•引數的個數、型別以及返回值的型別,沒有限制

•唯一可以帶有預設引數的操作符函式

一.解引用和間接成員訪問操作符

•如果乙個類過載了解引用和間接成員訪問操作符,那麼該類的物件就可以被當做指標來使用

一.自定義型別轉換

•通過建構函式實現自定義型別轉換

–class

integer

};

–「explicit」關鍵字可將這種型別轉換強制為顯式型別轉換

•通過型別轉換操作符函式實現自定義型別轉換

–class integer 

};

–「explicit」關鍵字可將這種型別轉換強制為顯式型別轉換,但需要編譯器支援c++11標準

•源型別是基本型別,只能通過建構函式實現自定義型別轉換

•目標型別是基本型別,只能通過型別轉換操作符函式實現自定義型別轉換

•源型別和目標型別都不是基本型別,既可以通過建構函式也可以通過型別轉換操作符函式實現自定義型別轉換,

但不要兩者同時使用,引發歧義

•源型別和目標型別都是基本型別,則無法實現自定義型別轉換,基本型別間的型別轉換規則完全由編譯器內建

•如果乙個類過載了new/new操作符,那麼當通過new/new建立該類的物件/物件陣列時,

將首先呼叫該操作符函式分配記憶體,然後再呼叫該類的建構函式

–class dummy 

static

void* operator

new (size_t size)

};

•包含自定義析構函式的類,通過new建立物件陣列,所分配的記憶體會在低位址部分預留出sizeof(size_t)個位元組,存放陣列長度

•使用new/new操作符的形式**

•如果乙個類過載了delete/delete操作符,那麼當通過delete/delete銷毀該類的物件/物件陣列時,

將首先呼叫該類的析構函式,然後再呼叫該操作符函式釋放記憶體

–class dummy 

static

void

operator

delete (void* p)

};

•包含自定義析構函式的類,通過delete銷毀物件陣列,會根據低位址部分預存的陣列長度,

從高位址到低位址依次對每個陣列元素呼叫析構函式

•使用delete/delete操作符的形式**

操作符函式及過載(1)

在特定條件下,編譯器有能力把乙個由運算元和操作符共同組成的表示式,解釋為對乙個全域性或成員函式的呼叫,該全域性或成員函式被稱為操作符函式 通過定義操作符函式,可以實現針對自定義型別的運算法則,並使之與內建型別一樣參與各種表示式 一.成員函式 形如l r的雙目操作符表示式,將被編譯器解釋為 l.ope...

操作符函式及過載(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 二.成員函式 非常函式以支援左值型運算元,非常返回值以支援左值型表示...