欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C++類繼承時(shí)的構(gòu)造函數(shù)

 更新時(shí)間:2022年03月09日 16:58:54   作者:機(jī)器學(xué)習(xí)入坑者  
這篇文章主要介紹了C++類繼承時(shí)的構(gòu)造函數(shù),C++中,子類繼承父類除去構(gòu)造函數(shù)和析構(gòu)函數(shù)以外的所有成員。因此,子類需要編寫自己的構(gòu)造函數(shù)和析構(gòu)函數(shù)。更多相關(guān)詳情需要的小伙伴可以參考下面文章介紹

前言:

子類需要編寫自己的構(gòu)造函數(shù)和析構(gòu)函數(shù),需要注意的是,子類只負(fù)責(zé)對新增的成員進(jìn)行初始化和掃尾編寫構(gòu)造和析構(gòu)函數(shù),父類成員的初始化和掃尾工作由父類的構(gòu)造函數(shù)和析構(gòu)函數(shù)完成。

無論何種類型的繼承方式,子類都無權(quán)訪問父類的所有成員,所以子類對父類的初始化需要父類的構(gòu)造函數(shù)完成。此時(shí),子類的構(gòu)造函數(shù)必須提供父類構(gòu)造函數(shù)所需的參數(shù)。

子類構(gòu)造函數(shù)的語法如下:

子類::子類(全部參數(shù)表):父類1(父類1參數(shù)表),父類2(父類2參數(shù)表)
      ...對象成員1(對象成員1參數(shù)表),對象成員2(對象成員2參數(shù)表)

其中,“全部參數(shù)表”中包含“所有父類所需參數(shù)”和“子類新增成員所需參數(shù)”;對象成員表示子類新增的對象成員(某些外部類的對象作為子類成員)。

必須指出,子類首先調(diào)用父類的構(gòu)造函數(shù),然后才調(diào)用自身的構(gòu)造函數(shù);如果子類含有多個(gè)構(gòu)造函數(shù),那么按照子類繼承各個(gè)父類時(shí)的聲明順序,來調(diào)用各個(gè)父類的構(gòu)造函數(shù)。

下面定義了X、Y和Z三個(gè)類,然后Point類繼承這三個(gè)類:

class X {
public:
?? ?X(int value) { printf("init X %d \n", value); }
};

class Y {
public:
?? ?Y(int value) { printf("init Y %d \n", value); }
};

class Z {
public:
?? ?Z() { printf("init Z \n"); }
};

class Point: public X, public Y , public z{
public:
?? ?Point(int value_x, int value_y, int value_point):X(value_x),Y(value_y) {
?? ??? ?printf("init Point %d \n", value_point);
?? ?}
};

可以看出,Point類的構(gòu)造函數(shù)“全部參數(shù)表”中給出了“父類所需參數(shù)”和“本類成員所需參數(shù)”(此例中Point類沒有對象成員),并以初始化列表的方式對各個(gè)父類進(jìn)行初始化。下面定義Point類對象,

來查看子類和父類構(gòu)造函數(shù)的調(diào)用順序:

int main() {
?? ?Point p(333, 666, 999);
}
// 得到下面的結(jié)果
init X 333
init Y 666
init Z
init Point 999

再次證明:因?yàn)?code>Point聲明時(shí)先繼承X類后繼承Y類,所以先調(diào)用X構(gòu)造函數(shù)后調(diào)用Y構(gòu)造函數(shù),最后調(diào)用Z類構(gòu)造函數(shù)。

此外,某個(gè)父類構(gòu)造函數(shù)不需要參數(shù)時(shí),子類構(gòu)造函數(shù)可以不考慮此父類,系統(tǒng)會(huì)調(diào)用該父類默認(rèn)的構(gòu)造函數(shù)(比如上述的Z類)。如果某個(gè)父類即含有需要參數(shù)的構(gòu)造函數(shù),又含有不需參數(shù)的構(gòu)造函數(shù),程序員可自行決定使用哪一個(gè)。

通過總結(jié)可以得出,子類構(gòu)造函數(shù)代碼運(yùn)行次序如下:

  • 首先,按照父類在繼承聲明時(shí)的次序調(diào)用對應(yīng)構(gòu)造函數(shù);
  • 其次,按照子類的對象成員在子類中聲明次序?qū)ζ溥M(jìn)行初始化;
  • 最后,執(zhí)行子類構(gòu)造函數(shù)體;

 到此這篇關(guān)于C++類繼承時(shí)的構(gòu)造函數(shù)的文章就介紹到這了,更多相關(guān)C++構(gòu)造函數(shù)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C++中const用于函數(shù)重載的示例代碼

    C++中const用于函數(shù)重載的示例代碼

    這篇文章主要介紹了C++中const用于函數(shù)重載的相關(guān)資料,需要的朋友可以參考下
    2017-09-09
  • C++11/14 線程的創(chuàng)建與分離的實(shí)現(xiàn)

    C++11/14 線程的創(chuàng)建與分離的實(shí)現(xiàn)

    這篇文章主要介紹了C++11/14 線程的創(chuàng)建與分離的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-01-01
  • 用C語言實(shí)現(xiàn)井字棋游戲代碼

    用C語言實(shí)現(xiàn)井字棋游戲代碼

    大家好,本篇文章主要講的是用C語言實(shí)現(xiàn)井字棋游戲代碼,感興趣的同學(xué)趕快來看一看吧,對你有幫助的話記得收藏一下,方便下次瀏覽
    2022-01-01
  • 詳解C語言之預(yù)處理(上)

    詳解C語言之預(yù)處理(上)

    這篇文章主要介紹了C語言程序的預(yù)處理,小編覺得這篇文章寫的還不錯(cuò),需要的朋友可以參考下,希望能夠給你帶來幫助
    2021-11-11
  • C語言打印各種圖案實(shí)例代碼

    C語言打印各種圖案實(shí)例代碼

    大家好,本篇文章主要講的是C語言打印各種圖案實(shí)例代碼,感興趣的同學(xué)趕快來看一看吧,對你有幫助的話記得收藏一下,方便下次瀏覽
    2021-12-12
  • C++回溯與分支限界算法分別解決背包問題詳解

    C++回溯與分支限界算法分別解決背包問題詳解

    給定n種物品和一背包。物品i的重量是wi,其價(jià)值為vi,背包的容量為C。問應(yīng)如何選擇裝入背包的物品,使得裝入背包中物品的總價(jià)值最大?下面我們分別用回溯與分支限界方法解決
    2022-06-06
  • C語言關(guān)鍵字之a(chǎn)uto register詳解

    C語言關(guān)鍵字之a(chǎn)uto register詳解

    這篇文章主要為大家介紹了C語言關(guān)鍵字之a(chǎn)uto register,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-01-01
  • c++之解決char轉(zhuǎn)string時(shí)出現(xiàn)的亂碼問題

    c++之解決char轉(zhuǎn)string時(shí)出現(xiàn)的亂碼問題

    這篇文章主要介紹了c++之解決char轉(zhuǎn)string時(shí)出現(xiàn)的亂碼問題,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-08-08
  • C++學(xué)習(xí)之移動(dòng)語義與智能指針詳解

    C++學(xué)習(xí)之移動(dòng)語義與智能指針詳解

    智能指針和移動(dòng)語義是迄今為止,最難理解的兩個(gè)概念,下面這篇文章主要給大家介紹了關(guān)于C++學(xué)習(xí)之移動(dòng)語義與智能指針的相關(guān)資料,需要的朋友可以參考下
    2021-05-05
  • C語言中的運(yùn)算符優(yōu)先級和結(jié)合性一覽表

    C語言中的運(yùn)算符優(yōu)先級和結(jié)合性一覽表

    這篇文章主要介紹了C語言中的運(yùn)算符優(yōu)先級和結(jié)合性一覽表,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-02-02

最新評論