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

歡迎訪問 生活随笔!

生活随笔

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

c/c++

派生类的构造【C++继承】

發(fā)布時間:2025/3/20 c/c++ 11 豆豆
生活随笔 收集整理的這篇文章主要介紹了 派生类的构造【C++继承】 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

  • 構(gòu)造規(guī)則
  • 語法格式
  • 構(gòu)造順序
    • 圖示
    • 說明
    • 構(gòu)造順序
  • 子類構(gòu)造器實戰(zhàn)
  • 層次設(shè)計感悟

構(gòu)造規(guī)則

派生類中,由基類繼承而來的成員的初始化工作,由基類的構(gòu)造函數(shù)完成。
派生類中新增的成員在派生類的構(gòu)造函數(shù)中初始化。

語法格式

派生類名::派生類名(總參列表) :基類名(參數(shù)表),內(nèi)嵌子對象(參數(shù)表) {派生類新增成員的初始化語句; //也可出現(xiàn)地參數(shù)列表中 }

構(gòu)造順序

圖示

說明

由于子類中,包含了兩部分內(nèi)容,一部分來自父類,一部分來自子類。
父類的部分,要由調(diào)用父類的構(gòu)造器來完成。
子類的部分,在子類的構(gòu)造器中來完成始化。
子類中,有內(nèi)嵌的子對象也需要構(gòu)造。

構(gòu)造順序

  • 標配:①:默認無參構(gòu)造器 ②:構(gòu)造器重載(包含無參) ③:默認參數(shù)(包含無參)
  • 先調(diào)用了基類的構(gòu)造器, 可以隱式調(diào)用 " 標配 " 或顯示調(diào)用 " 標配 "。但無 " 標配 " ,必須得顯示調(diào)用。
  • 內(nèi)嵌子對象的構(gòu)造, 可以隱式調(diào)用 " 標配 " 或顯示調(diào)用 " 標配 "。但無 " 標配 " ,必須得顯示調(diào)用。
  • 派生類必須顯示的在初始化參數(shù)列表中調(diào)用,初始化參數(shù)列表中的順序,不代表真實的調(diào)用順序。
  • 代碼演示:

    #include <iostream>using namespace std;class C { public:C(int c):cc(c){cout << "C()" << endl;}void displayC(){cout << "cc = " << cc << endl;}private:int cc; };class A { public:A(int a):aa(a){cout << "A()" << endl;}void displayA(){cout << "aa = " << aa << endl;}private:int aa; };class B:public A { public:B(int a,int b,int c):A(a),c(c),bb(b){cout << "B()" << endl;}C c;void displayB(){cout << "bb = " << bb << endl;} private:int bb; };int main() {B b(1,2,3);b.displayA();b.displayB();b.c.displayC();return 0; }

    運行結(jié)果:

    子類構(gòu)造器實戰(zhàn)

    代碼演示:

    #include <iostream>using namespace std;class Student { public:Student(string name, int num, char sex):_name(name), _num(num), _sex(sex) {}void dump(){cout << "name:" << _name << endl;cout << "num :" << _num << endl;cout << "sex :" << _sex << endl;}private:string _name;int _num;char _sex; };class Birthday { public:Birthday(int y, int m, int d):_year(y), _month(m), _day(d){}void disBirthday(){cout << "birth date:" << _year << ":" << _month << ":" << _day << endl;} private:int _year;int _month;int _day; };class Graduate :public Student { public:Graduate(string name, int num, char sex, float salary, int y, int m, int d):Student(name, num, sex),birth(y, m, d),_salary(salary){}void dis(){dump();cout << "salary:" << _salary << endl;birth.disBirthday();}private:float _salary;Birthday birth; }; int main() {Student s("zhao", 1001, 's');s.dump();Graduate g("sun", 2001, 's', 10000, 1990, 9, 19);g.dis();return 0; }

    運行結(jié)果:

    層次設(shè)計感悟

    繼承層次化的設(shè)計,本層次初始化,僅需要考慮上次層,而不是考慮上上層次或是更上層次。
    代碼演示:

    #include <iostream>using namespace std;class Student { public:Student(string name, int num, char sex):_name(name), _num(num), _sex(sex) {}void dump(){cout << "name:" << _name << endl;cout << "num :" << _num << endl;cout << "sex :" << _sex << endl;}private:string _name;int _num;char _sex; };class Birthday { public:Birthday(int y, int m, int d):_year(y), _month(m), _day(d) {}void disBirthday(){cout << "birth date:" << _year << ":" << _month << ":" << _day << endl;} private:int _year;int _month;int _day; };class Graduate :public Student { public:Graduate(string name, int num, char sex, float salary, int y, int m, int d):Student(name, num, sex), birth(y, m, d), _salary(salary) {}void dis(){dump();cout << "salary:" << _salary << endl;birth.disBirthday();}private:float _salary;Birthday birth; };class Doctor :public Graduate { public:Doctor(string name, int num, char sex,float salary, int y, int m, int d, string t):Graduate(name, num, sex, salary, y, m, d), title(t){}void disTitle(){dis();cout << "tital =" << title << endl;} private:string title; };int main() {Doctor d("sun", 2001, 's', 10000, 1990, 9, 19,"doctor S");d.disTitle();return 0; }

    運行結(jié)果:

    總結(jié)

    以上是生活随笔為你收集整理的派生类的构造【C++继承】的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。