14重載運(yùn)算與類型轉(zhuǎn)換
14.1基本概念
Operator重載的運(yùn)算符包含返回類型、參數(shù)列表以及函數(shù)體。
左側(cè)運(yùn)算對(duì)象傳遞給第一個(gè)參數(shù),而右側(cè)運(yùn)算對(duì)象傳遞給第二個(gè)參數(shù)。
不應(yīng)該被重載:邏輯與、或運(yùn)算符,逗號(hào)運(yùn)算符;&&和||;不重載逗號(hào)運(yùn)算符和取地址運(yùn)算符。
重載的賦值運(yùn)算應(yīng)該繼承而非違背其內(nèi)置版本的含義。
選擇作為成員或者非成員
如果我們想提供含有類對(duì)象的混合類型表達(dá)式,則運(yùn)算符必須定義成非成員函數(shù)。它的左側(cè)運(yùn)算對(duì)象必須是運(yùn)算符所屬類的一個(gè)對(duì)象。
14.2輸入和輸出運(yùn)算符
輸入輸出運(yùn)算符是非成員函數(shù)
14.3算術(shù)和關(guān)系運(yùn)算符
14.3.1相等運(yùn)算符設(shè)計(jì)準(zhǔn)則
14.3.2關(guān)系運(yùn)算符設(shè)計(jì)準(zhǔn)則
14.5下標(biāo)運(yùn)算符
必須是成員函數(shù)
14.6遞增和遞減運(yùn)算符
前置++i;
后置i++
接受一個(gè)額外的(不被使用)int類型的形參,編譯器會(huì)提供0
14.7成員訪問運(yùn)算符
14.8函數(shù)調(diào)用運(yùn)算符
定義了調(diào)用運(yùn)算符,則該類的對(duì)象稱作函數(shù)對(duì)象。可以調(diào)用這種對(duì)象,“行為像函數(shù)一樣”。
14.8.1lambda是函數(shù)對(duì)象
....
14.8.2標(biāo)準(zhǔn)庫(kù)定義的函數(shù)對(duì)象
14.8.3可調(diào)用對(duì)象與function
標(biāo)準(zhǔn)庫(kù)function類型
重載的函數(shù)與function
不能(直接)將重載的函數(shù)名字存入function類型的對(duì)象中,以免二義性,解決途徑是存儲(chǔ)函數(shù)指針。
14.9重載、類型轉(zhuǎn)換和運(yùn)算符(還未get到點(diǎn))
14.9.1類型轉(zhuǎn)換運(yùn)算符
可以面向任意類型(void除外)進(jìn)行定義,不允許轉(zhuǎn)換成數(shù)組或者函數(shù)類型,但允許轉(zhuǎn)換成指針(包括數(shù)組指針及函數(shù)指針)或者引用類型。必須定義成類的成員函數(shù),通常不應(yīng)該改變轉(zhuǎn)換對(duì)象的內(nèi)容,一般定義成const成員。
顯示的類型轉(zhuǎn)換運(yùn)算符(explicit),一般要通過顯示的強(qiáng)制類型轉(zhuǎn)換。但存在一個(gè)例外,就是表達(dá)式被用作條件,以下表達(dá)式出現(xiàn)下列位置時(shí),會(huì)隱式的執(zhí)行轉(zhuǎn)換。
14.9.2避免有二義性的類型轉(zhuǎn)換
14.9.3函數(shù)匹配與重載運(yùn)算符