日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

C++基类和派生类的构造函数(二)

發布時間:2025/4/5 c/c++ 17 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C++基类和派生类的构造函数(二) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

基類構造函數調用規則
事實上,通過派生類創建對象時必須要調用基類的構造函數,這是語法規定。換句話說,定義派生類構造函數時最好指明基類構造函數;如果不指明,就調用基類的默認構造函數(不帶參數的構造函數);如果沒有默認構造函數,那么編譯失敗。請看下面的例子:

#include <iostream> using namespace std;//基類People class People{public :People() ;//基類默認構造函數People(char *name,int age);protected:char *m_name;int m_age; }; People::People():m_name("XXX"),m_age(0){} People::People(char *name,int age):m_name(name),m_age(age){}//派生類Student class Student:public People{ public:Student();Student(char*,int ,float);public:void display();private:float m_score; };Student::Student():m_score(0){} //派生類默認構造函數 Student::Student(char *name,int age,float score):People(name,age),m_score(score){}void Student::display(){cout<<m_name<<"的年齡是"<<m_age<<",成績是"<<m_score<<"。"<<endl; } int main(){Student stu1;stu1.display();Student stu2("小明", 16, 90.5);stu2.display();return 0; }

運行結果:
xxx的年齡是0,成績是0。
小明的年齡是16,成績是90.5。

創建對象 stu1 時,執行派生類的構造函數Student::Student(),它并沒有指明要調用基類的哪一個構造函數,從運行結果可以很明顯地看出來,系統默認調用了不帶參數的構造函數,也就是People::People()。

創建對象 stu2 時,執行派生類的構造函數Student::Student(char *name, int age, float score),它指明了基類的構造函數。

在第 27 行代碼中,如果將People(name, age)去掉,也會調用默認構造函數,第 37 行的輸出結果將變為:
xxx的年齡是0,成績是90.5。

如果將基類 People 中不帶參數的構造函數刪除,那么會發生編譯錯誤,因為創建對象 stu1 時需要調用 People 類的默認構造函數, 而 People 類中已經顯式定義了構造函數,編譯器不會再生成默認的構造函數。

總結

以上是生活随笔為你收集整理的C++基类和派生类的构造函数(二)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。