C++派生类构造函数调用规则
一句話總結(jié):基類(lèi)必須要定義一個(gè)構(gòu)造函數(shù)。
派生類(lèi)構(gòu)造函數(shù)可以自動(dòng)調(diào)用基類(lèi)的默認(rèn)構(gòu)造函數(shù),但是前提是默認(rèn)構(gòu)造函數(shù)必須存在。通常情況下,默認(rèn)構(gòu)造函數(shù)系統(tǒng)會(huì)自動(dòng)生成的,但是如果在基類(lèi)中,我們自己定義了一個(gè)帶參數(shù)的構(gòu)造函數(shù),這個(gè)時(shí)候,系統(tǒng)是不會(huì)為基類(lèi)自動(dòng)生成默認(rèn)構(gòu)造函數(shù)的,這個(gè)時(shí)候派生類(lèi)則無(wú)法自動(dòng)調(diào)用基類(lèi)的默認(rèn)構(gòu)造函數(shù)了,因?yàn)榛?lèi)根本就不存在默認(rèn)構(gòu)造函數(shù)。遇到這種情況有兩種解決方案:其一,在基類(lèi)中定義一個(gè)默認(rèn)構(gòu)造函數(shù)(不帶參數(shù)的構(gòu)造函數(shù)),例如上一節(jié)中的例2;其二,派生類(lèi)中的每一個(gè)構(gòu)造函數(shù)都顯式的調(diào)用基類(lèi)中的帶參構(gòu)造函數(shù)。
通常我們還會(huì)遇到這樣一種情況,派生類(lèi)中并未顯式定義構(gòu)造函數(shù),這個(gè)時(shí)候派生類(lèi)中只有系統(tǒng)自動(dòng)生成的默認(rèn)構(gòu)造函數(shù),如此一來(lái),如果我們不為基類(lèi)設(shè)計(jì)一個(gè)默認(rèn)構(gòu)造函數(shù),則程序就會(huì)編譯出錯(cuò)。這種錯(cuò)誤很玄妙,如果不小心還真是難以發(fā)現(xiàn)。
?
總結(jié)
以上是生活随笔為你收集整理的C++派生类构造函数调用规则的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: C++继承机制下的构造函数
- 下一篇: s3c2440移植MQTT