雷火电竞-中国电竞赛事及体育赛事平台

歡迎來(lái)到入門(mén)教程網(wǎng)!

C語(yǔ)言

當(dāng)前位置:主頁(yè) > 軟件編程 > C語(yǔ)言 >

對(duì)C++默認(rèn)構(gòu)造函數(shù)的一點(diǎn)重要說(shuō)明

來(lái)源:本站原創(chuàng)|時(shí)間:2020-01-10|欄目:C語(yǔ)言|點(diǎn)擊:

大多數(shù)C++書(shū)籍都說(shuō)在我們沒(méi)有自己定義構(gòu)造函數(shù)的時(shí)候,編譯器會(huì)自動(dòng)生成默認(rèn)構(gòu)造函數(shù)。其實(shí)這句話(huà)我一直也是

深信不疑。但是最近看了一些資料讓我有了一點(diǎn)新的認(rèn)識(shí)。

其實(shí)我覺(jué)得大多數(shù)C++書(shū)籍之所以這樣描述其實(shí)是玩了文字游戲的。如果說(shuō)編譯器自動(dòng)產(chǎn)生的默認(rèn)構(gòu)造函數(shù)對(duì)于我們

的類(lèi)沒(méi)有任何作用,也就是說(shuō)在編譯器默認(rèn)生成的這個(gè)構(gòu)造函數(shù)里根本沒(méi)有任何實(shí)質(zhì)性的代碼工作,那么這種默認(rèn)構(gòu)

造其實(shí)是可有可無(wú)的,所以不妨說(shuō)編譯器其實(shí)是為每個(gè)類(lèi)生成了默認(rèn)構(gòu)造函數(shù)的。

在深度探索C++對(duì)象模型中講了四種關(guān)于編譯器自動(dòng)生成默認(rèn)構(gòu)造函數(shù)的情況,在這四種情況下生成的默認(rèn)構(gòu)

造函數(shù)里面是由實(shí)質(zhì)的隱含代碼操作的:

1、 如果類(lèi)A成員中含有某個(gè)類(lèi)B的對(duì)象,恰好類(lèi)B也顯示定義了構(gòu)造函數(shù),那么在產(chǎn)生類(lèi)A對(duì)象的時(shí)候編譯器會(huì)產(chǎn)生一個(gè)默認(rèn)構(gòu)造函數(shù),在這個(gè)默認(rèn)構(gòu)造函數(shù)中提供了調(diào)用類(lèi)A構(gòu)造函數(shù)的代碼。


2、如果類(lèi)B繼承于類(lèi)A,且類(lèi)A顯示定義了構(gòu)造函數(shù),那么在生成類(lèi)B對(duì)象的過(guò)程中編譯器同樣會(huì)產(chǎn)生一個(gè)默認(rèn)構(gòu)造函數(shù),在這個(gè)構(gòu)造函數(shù)中提供調(diào)用基類(lèi)A構(gòu)造函數(shù)的代碼。


3、如果某個(gè)類(lèi)含有虛函數(shù),那么編譯器會(huì)自動(dòng)產(chǎn)生一個(gè)默認(rèn)構(gòu)造函數(shù)以提供虛表指針相關(guān)的初始化操作。


4、如果一個(gè)類(lèi)虛繼承于其他類(lèi),那么同樣的編譯器會(huì)為該類(lèi)產(chǎn)生默認(rèn)的構(gòu)造函數(shù)。


除以上四種情況,編譯器都不產(chǎn)生默認(rèn)構(gòu)造函數(shù),因?yàn)榫退憔幾g器產(chǎn)生了默認(rèn)構(gòu)造函數(shù),然而在該默認(rèn)構(gòu)造函數(shù)中沒(méi)有實(shí)質(zhì)的內(nèi)容,那么這個(gè)默認(rèn)構(gòu)造函數(shù)也就是沒(méi)存在的意義的,那么我們說(shuō)編譯器不產(chǎn)生也無(wú)妨吧。

以上就是小編為大家?guī)?lái)的對(duì)C++默認(rèn)構(gòu)造函數(shù)的一點(diǎn)重要說(shuō)明全部?jī)?nèi)容了,希望大家多多支持我們~

上一篇:談?wù)凜++學(xué)習(xí)之Pair的使用方法

欄    目:C語(yǔ)言

下一篇:詳談C++中虛基類(lèi)在派生類(lèi)中的內(nèi)存布局

本文標(biāo)題:對(duì)C++默認(rèn)構(gòu)造函數(shù)的一點(diǎn)重要說(shuō)明

本文地址:http://www.jygsgssxh.com/a1/Cyuyan/1908.html

網(wǎng)頁(yè)制作CMS教程網(wǎng)絡(luò)編程軟件編程腳本語(yǔ)言數(shù)據(jù)庫(kù)服務(wù)器

如果侵犯了您的權(quán)利,請(qǐng)與我們聯(lián)系,我們將在24小時(shí)內(nèi)進(jìn)行處理、任何非本站因素導(dǎo)致的法律后果,本站均不負(fù)任何責(zé)任。

聯(lián)系QQ:835971066 | 郵箱:835971066#qq.com(#換成@)

Copyright © 2002-2020 腳本教程網(wǎng) 版權(quán)所有