一.運(yùn)算符重載補(bǔ)充:
1.流插入運(yùn)算符:
我們知道進(jìn)行運(yùn)算符重載這個(gè)函數(shù)的參數(shù)的左右類型是非常重要的,我們嘗試在類中去定義這個(gè)流插入重載!
1.考慮到隱含的參數(shù)指針:
2.進(jìn)行優(yōu)化!
我們觀察上面的代碼發(fā)現(xiàn)可以實(shí)現(xiàn)在類中進(jìn)行流插入運(yùn)算符的一個(gè)重載但是我們需要考慮隱含參數(shù)的位置所以我們進(jìn)行傳參的時(shí)候就 寫成了 == d1<<cout ==.
上面這個(gè)語句是非常奇怪的因?yàn)槲覀冎笆褂胏out的時(shí)候把類型的數(shù)據(jù)插入到cout中但是上面這個(gè)就是把cout插入到d1中這是不好的!
沒有人規(guī)定類的操作符必須要寫在類中!
我們把函數(shù)定義到全局中-》出現(xiàn)了一個(gè)問題我們?cè)谌种惺钦也坏匠蓡T變量的!我們成員變量是私有的我們不希望成員變量不去使用成員函數(shù)而發(fā)生改變!
2-1:解決辦法:友元
通過friend 關(guān)鍵字去在類中聲明一個(gè)友元函數(shù)就可以解決,我是你的朋友可以訪問私有的成員變量!
2-2:流插入一定滿足連續(xù)?
我們通過前面的知識(shí)我們知道滿足連續(xù)性這個(gè)函數(shù)就需要一個(gè)返回值!
3.總結(jié):
其他的運(yùn)算符一般是實(shí)現(xiàn)在成員函數(shù)中,但是流插入和流提取操作符是實(shí)現(xiàn)在全局的。
1.因?yàn)榇嬖陔[含的參數(shù)(影響了操作符的順序)。
1-1:寫在全局改變了函數(shù)傳參的順序并且滿足了正常的cout的使用順序!
2.寫到全局訪問不到私有的問題?
2-1:友元解決!
2.流提取運(yùn)算符:
二.const 成員:
1.概念進(jìn)入:
我們觀察上面的代碼會(huì)發(fā)現(xiàn)?
我們定義了一個(gè)const Date 類型的d2是不想要d2這個(gè)日期對(duì)象被修改但是我們的隱含參數(shù)默認(rèn)是一個(gè)Date* 類型,所以參數(shù)列表不匹配!
通過將const修飾的“成員函數(shù)”稱之為const成員函數(shù),const修飾類成員函數(shù),實(shí)際修飾該成員函數(shù)隱含的this指針,表明在該成員函數(shù)中不能對(duì)類的任何成員進(jìn)行修改。
2.具體操作:
需要特別注意成員函數(shù)定義和聲明分開的時(shí)候const都需要加上和缺省參數(shù)不一樣!
3.參數(shù)變化:
3-1:權(quán)限下降!
4.成員函數(shù)const 原則:
1.可以定義成const 的成員函數(shù)都應(yīng)該定義,這樣const 和非const 對(duì)象都可以調(diào)用。
2.如果不去定義const 那么const類型的對(duì)象就不可以去進(jìn)行成員函數(shù)調(diào)用!
3.如果有需要修改成員變量的函數(shù)不可以使用const去修飾!
三.構(gòu)造函數(shù)補(bǔ)充:
1.初始化:
我們之前通過構(gòu)造函數(shù)去初始化成員變量其實(shí)是一種賦值!
雖然上述構(gòu)造函數(shù)調(diào)用之后,對(duì)象中已經(jīng)有了一個(gè)初始值,但是不能將其稱為對(duì)對(duì)象中成員變量的初始化,構(gòu)造函數(shù)體中的語句只能將其稱為賦初值,而不能稱之初始化。因?yàn)槌跏蓟荒艹跏蓟淮?,而?gòu)造函數(shù)體內(nèi)可以多次賦值。
2.初始化列表:
初始化列表:以一個(gè)冒號(hào)開始,接著是一個(gè)以逗號(hào)分隔的數(shù)據(jù)成員列表,每個(gè)"成員變量"后面跟一個(gè)放在括號(hào)中的初始值或表達(dá)式。
3.作用:
1.const的初始化:
2.引用的初始化:
我們知道引用是必須需要初始化,第一次是地址,之后都是賦值!所以我們不可以讓引用類型的成員變量在賦值的時(shí)候再去拿到別的值! 不然會(huì)產(chǎn)生賦值之后的這個(gè)成員變量到底是誰的別名! 通過在初始化列表進(jìn)行初始化我們?cè)偃ベx值我們就知道這個(gè)引用是誰的別名。
3.自定義類型成員的初始化:
我們通過初始化列表就可以自己搞定初始化一個(gè)隊(duì)列!
3-1.自定義類型初始化列表:
通過初始化列表自己去調(diào)用對(duì)應(yīng)的構(gòu)造函數(shù)去完成我們想要多大的棧就可以初始化多大的棧!
3-2.所有都可以使用初始化列表?
我們不能完全舍棄構(gòu)造函數(shù)初始化!因?yàn)閷?duì)于構(gòu)造函數(shù)來說處理?xiàng)?臻g開辟是否成功等比較長(zhǎng)的代碼上是比較有優(yōu)勢(shì)的。初始化列表沒有辦法去判斷棧空間是否開辟成功!
4.初始化列表的順序!
初始化列表要和類的成員變量定義順序相同!
4.總結(jié):
1.引用,const,沒有默認(rèn)構(gòu)造的自定義類型成員!
2.自定義類型的成員有顯示的構(gòu)造函數(shù)!
文章來源:http://www.zghlxwxcb.cn/news/detail-739062.html
3.盡量使用初始化列表因?yàn)椴皇褂靡矔?huì)走到初始化列表中!
3-1:
80%----100% 使用初始化列表:
0%-20% 進(jìn)行初始化列表+構(gòu)造函數(shù)的混和使用!文章來源地址http://www.zghlxwxcb.cn/news/detail-739062.html
到了這里,關(guān)于[C++ ]:5.類和對(duì)象中(運(yùn)算符重載補(bǔ)充)+ 類和對(duì)象下(初始化列表)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!