C++基类和派生类的构造函数(二)
基類構(gòu)造函數(shù)調(diào)用規(guī)則
事實上,通過派生類創(chuàng)建對象時必須要調(diào)用基類的構(gòu)造函數(shù),這是語法規(guī)定。換句話說,定義派生類構(gòu)造函數(shù)時最好指明基類構(gòu)造函數(shù);如果不指明,就調(diào)用基類的默認構(gòu)造函數(shù)(不帶參數(shù)的構(gòu)造函數(shù));如果沒有默認構(gòu)造函數(shù),那么編譯失敗。請看下面的例子:
運行結(jié)果:
xxx的年齡是0,成績是0。
小明的年齡是16,成績是90.5。
創(chuàng)建對象 stu1 時,執(zhí)行派生類的構(gòu)造函數(shù)Student::Student(),它并沒有指明要調(diào)用基類的哪一個構(gòu)造函數(shù),從運行結(jié)果可以很明顯地看出來,系統(tǒng)默認調(diào)用了不帶參數(shù)的構(gòu)造函數(shù),也就是People::People()。
創(chuàng)建對象 stu2 時,執(zhí)行派生類的構(gòu)造函數(shù)Student::Student(char *name, int age, float score),它指明了基類的構(gòu)造函數(shù)。
在第 27 行代碼中,如果將People(name, age)去掉,也會調(diào)用默認構(gòu)造函數(shù),第 37 行的輸出結(jié)果將變?yōu)?#xff1a;
xxx的年齡是0,成績是90.5。
如果將基類 People 中不帶參數(shù)的構(gòu)造函數(shù)刪除,那么會發(fā)生編譯錯誤,因為創(chuàng)建對象 stu1 時需要調(diào)用 People 類的默認構(gòu)造函數(shù), 而 People 類中已經(jīng)顯式定義了構(gòu)造函數(shù),編譯器不會再生成默認的構(gòu)造函數(shù)。
總結(jié)
以上是生活随笔為你收集整理的C++基类和派生类的构造函数(二)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C++基类和派生类的构造函数(一)
- 下一篇: C++基类和派生类的析构函数