您好,登錄后才能下訂單哦!
今天就跟大家聊聊有關(guān)怎么更好的進(jìn)行C++構(gòu)造函數(shù),可能很多人都不太了解,為了讓大家更加了解,小編給大家總結(jié)了以下內(nèi)容,希望大家根據(jù)這篇文章可以有所收獲。
構(gòu)造函數(shù)是開發(fā)過程中的一種特殊的方法,其主要用來(lái)在創(chuàng)建對(duì)象時(shí)的初始化對(duì)象,也就是對(duì)象成員變量賦初始值,在C++中進(jìn)行C++構(gòu)造函數(shù)時(shí),無(wú)論什么時(shí)候,只要?jiǎng)?chuàng)建類或結(jié)構(gòu),就會(huì)調(diào)用它的構(gòu)造函數(shù)
但是程序通過了編譯檢查并不表示錯(cuò)誤已經(jīng)不存在了,在“錯(cuò)誤”的大家庭里,“語(yǔ)法錯(cuò)誤”的地位只能算是小弟弟。級(jí)別高的錯(cuò)誤通常隱藏得很深,就象狡猾的罪犯,想逮住他可不容易。
根據(jù)經(jīng)驗(yàn),不少難以察覺的程序錯(cuò)誤是由于變量沒有被正確初始化或清除造成的,而初始化和清除工作很容易被人遺忘。Stroustrup在設(shè)計(jì)C++語(yǔ)言時(shí)充分考慮了這個(gè)問題并很好地予以解決:把對(duì)象的初始化工作放在C++構(gòu)造函數(shù)中,把清除工作放在析構(gòu)函數(shù)中。當(dāng)對(duì)象被創(chuàng)建時(shí),構(gòu)造函數(shù)被自動(dòng)執(zhí)行。當(dāng)對(duì)象消亡時(shí),析構(gòu)函數(shù)被自動(dòng)執(zhí)行。這下就不用擔(dān)心忘了對(duì)象的初始化和清除工作。
構(gòu)造函數(shù)與析構(gòu)函數(shù)的名字不能隨便起,必須讓編譯器認(rèn)得出才可以被自動(dòng)執(zhí)行。Stroustrup的命名方法既簡(jiǎn)單又合理:讓構(gòu)造函數(shù)、析構(gòu)函數(shù)與類同名,由于析構(gòu)函數(shù)的目的與構(gòu)造函數(shù)的相反,就加前綴‘~’以示區(qū)別。
除了名字外,構(gòu)造函數(shù)與析構(gòu)函數(shù)的另一個(gè)特別之處是沒有返回值類型,這與返回值類型為void的函數(shù)不同。C++構(gòu)造函數(shù)與析構(gòu)函數(shù)的使命非常明確,就象出生與死亡,光溜溜地來(lái)光溜溜地去。如果它們有返回值類型,那么編譯器將不知所措。為了防止節(jié)外生枝,干脆規(guī)定沒有返回值類型。(以上典故參考了文獻(xiàn)[Eekel, p55-p56])
C++構(gòu)造函數(shù)有個(gè)特殊的初始化方式叫“初始化表達(dá)式表”(簡(jiǎn)稱初始化表)。初始化表位于函數(shù)參數(shù)表之后,卻在函數(shù)體 {} 之前。這說(shuō)明該表里的初始化工作發(fā)生在函數(shù)體內(nèi)的任何代碼被執(zhí)行之前。
構(gòu)造函數(shù)初始化表的使用規(guī)則:
如果類存在繼承關(guān)系,派生類必須在其初始化表里調(diào)用基類的構(gòu)造函數(shù)。
例如:
class F { public: F(int x, int y); // 構(gòu)造函數(shù) private: int m_x, m_y; int m_i, m_j; }
類的數(shù)據(jù)成員的初始化可以采用初始化表或函數(shù)體內(nèi)賦值兩種方式,這兩種方式的效率不完全相同,非內(nèi)部數(shù)據(jù)類型的成員對(duì)象應(yīng)當(dāng)采用***種方式初始化,以獲取更高的效率。
看完上述內(nèi)容,你們對(duì)怎么更好的進(jìn)行C++構(gòu)造函數(shù)有進(jìn)一步的了解嗎?如果還想了解更多知識(shí)或者相關(guān)內(nèi)容,請(qǐng)關(guān)注億速云行業(yè)資訊頻道,感謝大家的支持。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。