C 作為C語言的繼承,具有C語言的一些特性,C 主要是面向?qū)ο?,因此離不開類的使用,而類的使用和C語言里面的結(jié)構(gòu)體很像,不過,它比結(jié)構(gòu)體更加靈活。今天我就把使用類時碰到的關(guān)于構(gòu)造函數(shù)的知識整理起來,因為構(gòu)造函數(shù)實在是太多變了,我覺得很有必要寫出來,希望可以幫助到你們。 類為什么不能進行初始化? 因為類就像結(jié)構(gòu)體一樣只是進行了聲明,并沒有實際的開辟空間,所以無法對數(shù)據(jù)成員進行初始化,這時候要想初始化只能借助構(gòu)造函數(shù) 什么是構(gòu)造函數(shù)? 1.構(gòu)造函數(shù)是一種特殊的成員函數(shù),與其他的成員函數(shù)不同,不需要用戶調(diào)用它,而是在建立對象時自動執(zhí)行。 2.構(gòu)造函數(shù)的名字必須和類名同名,而不能任意命名,以便編譯系統(tǒng)可以識別。 3.構(gòu)造函數(shù)不具有任何類型,不返回任何值 4.構(gòu)造函數(shù)其實不光可以執(zhí)行初始化,還可以進行其他操作,但是為了讓程序保持清晰的思路,一般不建議這么做。 5.千萬不要自己去調(diào)用構(gòu)造函數(shù),這是極其錯誤的行為 要想使用好構(gòu)造函數(shù),這上面的幾點一定要牢記,接下來我就分析一下構(gòu)造函數(shù)具有哪些形式。 ps:由于我之前的筆風(fēng)都是偏嚴(yán)肅,但是實際上我的性格比較活潑,所以不喜歡太生硬的陳述,這次我決定小小改變一下,讓文章可以看著活潑一點,不那么死板 對象的初始化 在C 里面,聲明一個類時,并不能直接進行初始化,這時候,你要還是想初始化該怎么辦呢?這就要用到構(gòu)造函數(shù)了。 構(gòu)造函數(shù)進行對象的初始化可謂是得心應(yīng)手,但是構(gòu)造函數(shù)的形式實在是太多了,所以我決定分幾種類型進行說明 1.在構(gòu)造函數(shù)內(nèi)部直接進行初始化 雖然C 的語法就是不允許類直接進行初始化,但是它又增加了一個構(gòu)造函數(shù)來間接初始化,關(guān)鍵是這個構(gòu)造函數(shù)是相當(dāng)?shù)暮糜冒?。我剛上手幾天就感覺到了,哈哈哈,初學(xué)者的福音。廢話不多說,先將代碼放在下面,稍后解釋 無參構(gòu)造函數(shù),最簡單的一種 上面這種事最簡單的,你可以把它這樣認為,構(gòu)造函數(shù)是會自動生成的,但是這一步你并不能看到,而你顯式地把它寫出來,是為了方便理解,因為C 編譯器會做很多我們看不到的內(nèi)部操作,這樣做事為了新手更好的理解 上面應(yīng)該很好理解吧,畢竟我也是個初學(xué)者,但是還是很容易看懂呢。 再來接著看下面這種 這是在類外定義的無參構(gòu)造函數(shù),這點和在類外定義成員函數(shù)是類似的,都需要在類體中先進行聲明。類外定義的無參構(gòu)造函數(shù),它的運作機制大概是下面這樣的 1.在定義對象時,就已經(jīng)將實參給出 2.在建立對象時,編譯器要做的就是把實參的值傳遞給構(gòu)造函數(shù)相應(yīng)的形參然后把他們直接作為數(shù)據(jù)成員的初值 記住,這里的初始化相當(dāng)于是主函數(shù)中完成的,只是將實參傳了過去。 構(gòu)造函數(shù)的參數(shù)列表 如上所述,構(gòu)造函數(shù)可以通過實參傳遞給構(gòu)造函數(shù)的形參,從而完成初始化,其實,他還可以將初始化變成多種形式 上面的代碼,就是利用了構(gòu)造函數(shù)參數(shù)列表進行的初始化。box1傳遞了一個實參,因此,其余的兩個參數(shù)都需要直接依靠構(gòu)造函數(shù)給出的形參進行初始化,而其余的也分別給出了兩個和三個。 但是你要知道的是,傳遞給構(gòu)造函數(shù)的參數(shù)必須類型是準(zhǔn)確的,否則它會因為無法識別類型而報錯。 總結(jié):構(gòu)造函數(shù)的形式真的可以說是千變?nèi)f化的,但是我們只要熟悉了這幾種常見的類型,那就可以觸類旁通,掌握這個知識點。 |
|