C/C++編程筆記:C++入門(mén)知識(shí)丨運(yùn)算符重載
本篇要學(xué)習(xí)的內(nèi)容和知識(shí)結(jié)構(gòu)概覽

運(yùn)算符重載使用場(chǎng)景
常規(guī)賦值操作

我們現(xiàn)在有一個(gè)類

想要實(shí)現(xiàn)這種賦值操作

具體實(shí)現(xiàn)如下:


所以說(shuō)呢,我們?cè)谑褂眠\(yùn)算符進(jìn)行運(yùn)算的時(shí)候, 實(shí)際上也是通過(guò)函數(shù)來(lái)實(shí)現(xiàn)運(yùn)算的.
任何運(yùn)算都是通過(guò)函數(shù)來(lái)實(shí)現(xiàn)的, 所以通過(guò)運(yùn)算符來(lái)進(jìn)行計(jì)算, 實(shí)際也是通過(guò)函數(shù)來(lái)完成
運(yùn)算符重載的實(shí)質(zhì)
表達(dá)式 7 / 2 = 3, 7.0 / 2.0 = 3.5, 同一個(gè)運(yùn)算符 / , 具有不同的意義, 稱之為”運(yùn)算符重載”, 實(shí)際上就是"函數(shù)重載".
每個(gè)運(yùn)算符都有自己的函數(shù)形式, 像下面這些
7 + 2 的函數(shù)形式就是 operator + (7, 2)
7 - 2 的函數(shù)形式就是 operator - (7, 2)
7 * 2 的函數(shù)形式就是 operator * (7, 2)
7 / 2 的函數(shù)形式就是 operator / (7, 2)
所以, 要重載某個(gè)運(yùn)算符, 只要重載相應(yīng)的函數(shù)就可以了
比如:

定義的重載運(yùn)算符都要求能夠訪問(wèn)這個(gè)類型的私有成員, 在這個(gè)前提下:
要么將運(yùn)算符重載為這個(gè)類型的成員函數(shù)
要么將運(yùn)算符重載為這個(gè)類型的友元
將作為類的成員函數(shù)的重載運(yùn)算符稱為類運(yùn)算符
將作為類的友元重載運(yùn)算符稱為友元運(yùn)算符
可重載運(yùn)算符和不可重載運(yùn)算符的列表
下面是: 可重載運(yùn)算符與只能用類運(yùn)算符重載和只能用友元運(yùn)算符重載和不是運(yùn)算符的區(qū)分

插入符<< 和 提取符 >> 的重載
注意:
<< 或者 >> 輸入流和輸出流都是標(biāo)準(zhǔn)類庫(kù), 不可修改, 所以不能在它們自己的類里重載為類運(yùn)算符
操作符的左邊是流對(duì)象,? 而不是被操作的對(duì)象,而且我們還要訪問(wèn)被操作對(duì)象的私有數(shù)據(jù), 所以我們只能將它們作為被操作類對(duì)象的友元重載


注意:不能自己定義新的運(yùn)算符, 只能是把原有的運(yùn)算符用到自己設(shè)計(jì)的類上去
++ 運(yùn)算符的重載:
作為類運(yùn)算符的重載

作為友元運(yùn)算符的重載


注意:
經(jīng)過(guò)重載, 運(yùn)算符并不改變?cè)械膬?yōu)先級(jí), 也不改變所需操作數(shù)目
當(dāng)不涉及到定義的類對(duì)象時(shí), 它仍然執(zhí)行系統(tǒng)預(yù)定義的運(yùn)算, 只有用到自己定義的對(duì)象止, 才執(zhí)行新定義的操作
類運(yùn)算符和友元運(yùn)算符的區(qū)別
如果運(yùn)算符所需的操作數(shù)希望進(jìn)行隱式類型轉(zhuǎn)換, 則運(yùn)算符應(yīng)通過(guò)友元來(lái)重載
如果一個(gè)運(yùn)算符的操作需要修改類對(duì)象的狀態(tài), 則應(yīng)當(dāng)使用類運(yùn)算符
運(yùn)算符 + 作為友元運(yùn)算符


運(yùn)算符 + 作為類運(yùn)算符 (會(huì)出現(xiàn)編譯錯(cuò)誤)

注意:
在上面的main函數(shù)代碼中, 如果對(duì)象作為重載運(yùn)算符函數(shù)的參數(shù), 則可以使用構(gòu)造函數(shù)將常量轉(zhuǎn)換成該類型的對(duì)象. 如果使用引用作為參數(shù), 這些常量不能作為對(duì)象名使用, 所以編譯錯(cuò)誤
總結(jié)
在學(xué)習(xí)C++這門(mén)語(yǔ)言的時(shí)候明顯的感覺(jué)到她的包羅萬(wàn)象, 豐富多彩. 她有自己的很多特性, 表現(xiàn)在使用上就是更加的靈活, 總得來(lái)說(shuō)就是: 沒(méi)有她沒(méi)有的, 只有你想不到的!
本系列文章到此就結(jié)束了,希望對(duì)大家有幫助!
自學(xué)C/C++編程難度很大,不妨和一些志同道合的小伙伴一起學(xué)習(xí)成長(zhǎng)!

另外,UP在主頁(yè)上傳了一些學(xué)習(xí)C/C++編程的視頻教程,有興趣或者正在學(xué)習(xí)的小伙伴一定要去看一看哦!會(huì)對(duì)你有幫助的~