亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

c++ 子類構(gòu)造函數(shù)初始化及父類構(gòu)造初始化的使用

 更新時(shí)間:2020年07月17日 17:19:06   作者:sevencheng798  
這篇文章主要介紹了c++ 子類構(gòu)造函數(shù)初始化及父類構(gòu)造初始化的使用,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

 我們知道,構(gòu)造方法是用來初始化類對(duì)象的。如果在類中沒有顯式地聲明構(gòu)造函數(shù),那么編譯器會(huì)自動(dòng)創(chuàng)建一個(gè)默認(rèn)的構(gòu)造函數(shù);并且這個(gè)默認(rèn)的構(gòu)造函數(shù)僅僅在沒有顯式地聲明構(gòu)造函數(shù)的情況下才會(huì)被創(chuàng)建創(chuàng)建。

       構(gòu)造函數(shù)與父類的其它成員(成員變量和成員方法)不同,它不能被子類繼承。因此,在創(chuàng)建子類對(duì)象時(shí),為了初始化從父類中繼承來的成員變量,編譯器需要調(diào)用其父類的構(gòu)造函數(shù)。如果子類的構(gòu)造函數(shù)沒有顯示地調(diào)用父類的構(gòu)造函數(shù),則默認(rèn)調(diào)用父類的無參構(gòu)造函數(shù),至于什么事顯式調(diào)用,在下面會(huì)詳細(xì)說明!關(guān)于子類中構(gòu)造函數(shù)的構(gòu)造原則,總結(jié)如下,歡迎大家指導(dǎo)與批評(píng)。

         1.父類沒有聲明構(gòu)造函數(shù)

         (1)子類也沒有聲明自己的構(gòu)造函數(shù),則父類和子類均由編譯器生成默認(rèn)的構(gòu)造函數(shù)。

         (2)子類中聲明了構(gòu)造函數(shù)(無參或者帶參),則子類的構(gòu)造函數(shù)可以寫成任何形式,不用顧忌父類的構(gòu)造函數(shù)。在創(chuàng)建子類對(duì)象時(shí),先調(diào)用父類默認(rèn)的構(gòu)造函數(shù)(編譯器自動(dòng)生成),再調(diào)用子類的構(gòu)造函數(shù)。

         2.父類只聲明了無參構(gòu)造函數(shù)

         如果子類的構(gòu)造函數(shù)沒有顯式地調(diào)用父類的構(gòu)造,則將會(huì)調(diào)用父類的無參構(gòu)造函數(shù)。也就是說,父類的無參構(gòu)造函數(shù)將會(huì)被隱式地調(diào)用。

         3.父類只聲明了帶參構(gòu)造函數(shù)

         在這種情況下,要特別注意。因?yàn)楦割愔挥袔⒌臉?gòu)造函數(shù),所以如果子類中的構(gòu)造函數(shù)沒有顯示地調(diào)用父類的帶參構(gòu)造函數(shù),則會(huì)報(bào)錯(cuò),所以必需顯示地調(diào)用。

關(guān)于構(gòu)造函數(shù)的顯示調(diào)用,參見下例。

class animal
{
protected:  //成員變量,聲明為protected或者public,這里選擇protected
	int height; //若聲明為private,則不能被子類繼承訪問,會(huì)報(bào)錯(cuò)
	int weight;
public:
	animal(int height,int weight) //帶參的構(gòu)造函數(shù)
	{
		this->height=height;
		this->weight=weight;
		cout<<"animal的帶參構(gòu)造函數(shù)被調(diào)用"<<endl;
	}
	virtual ~animal()
	{
		cout<<"animal的析構(gòu)函數(shù)被調(diào)用"<<endl;
	}
};
//子類
class fish:public animal
{
public:
	fish():animal(height,weight) //顯示調(diào)用父類的構(gòu)造函數(shù)
	{
		cout<<"fish的構(gòu)造函數(shù)被調(diào)用"<<endl;
	}
	virtual ~fish()
	{
		cout<<"fish的析構(gòu)函數(shù)被調(diào)用"<<endl;
	}
};

在子類fish的構(gòu)造函數(shù)中,加上一個(gè)冒號(hào)(:),然后加上父類的帶參構(gòu)造函數(shù),這就是父類構(gòu)造函數(shù)的顯式調(diào)用。這樣,在子類的構(gòu)造函數(shù)被調(diào)用時(shí),系統(tǒng)就會(huì)去調(diào)用父類的帶參構(gòu)造函數(shù),從而實(shí)現(xiàn)初始化父類的成員變量。運(yùn)行結(jié)果如下:

注意:

如果父類只有帶參的構(gòu)造函數(shù),且該帶參的構(gòu)造函數(shù)的參數(shù)有默認(rèn)值,此時(shí)在子類中也可以不用顯示的調(diào)用父類的構(gòu)造函數(shù)。

// 父類的構(gòu)造函數(shù),改成帶有默認(rèn)值的參數(shù), 這樣在子類中就可以不用顯示調(diào)用了
  animal(int height=19 ,int weight=20) //帶參的構(gòu)造函數(shù)
  {
    this->height=height;
    this->weight=weight;
    cout<<"animal的帶參構(gòu)造函數(shù)被調(diào)用"<<endl;
  }

4.父類同時(shí)聲明了無參和帶參構(gòu)造函數(shù)

         在這種情況下,子類只需要實(shí)現(xiàn)父類的一個(gè)構(gòu)造函數(shù)即可,不管是無參的還是帶參的構(gòu)造函數(shù)。如果子類的構(gòu)造函數(shù)沒有顯示地調(diào)用父類的構(gòu)造函數(shù)(無參或帶參),則默認(rèn)調(diào)用父類的無參構(gòu)造函數(shù)。

//父類
class animal
{
protected:  //成員變量,聲明為protected或者public,這里選擇protected
	int height; //若聲明為private,則不能被子類繼承訪問,會(huì)報(bào)錯(cuò)
	int weight;
public:	
	animal()
	{
		height=0;
		weight=0;
		cout<<"animal的無參構(gòu)造函數(shù)被調(diào)用"<<endl;
	}
	animal(int height,int weight) //帶參的構(gòu)造函數(shù)
	{
		this->height=height;
		this->weight=weight;
		cout<<"animal的帶參構(gòu)造函數(shù)被調(diào)用"<<endl;
	}
	virtual ~animal()
	{
		cout<<"animal的析構(gòu)函數(shù)被調(diào)用"<<endl;
	}
};
//子類
class fish:public animal
{
public:
	fish()  //沒有顯示地調(diào)用父類的構(gòu)造函數(shù)(無參或帶參),則默認(rèn)調(diào)用父類的無參構(gòu)造函數(shù)
	{
		cout<<"fish的構(gòu)造函數(shù)被調(diào)用"<<endl;
	}
	virtual ~fish()
	{
		cout<<"fish的析構(gòu)函數(shù)被調(diào)用"<<endl;
	}
};

運(yùn)行結(jié)果如下:

總結(jié)以上幾條,可以歸納出C++中子類繼承父類時(shí)構(gòu)造函數(shù)的寫法的規(guī)律:當(dāng)父類有顯式地聲明了構(gòu)造函數(shù)時(shí),子類最低限度的實(shí)現(xiàn)父類中的一個(gè);當(dāng)父類沒有聲明構(gòu)造函數(shù)時(shí),子類可以不聲明構(gòu)造函數(shù)或者任意地書寫構(gòu)造函數(shù)。

到此這篇關(guān)于c++ 子類構(gòu)造函數(shù)初始化及父類構(gòu)造初始化的使用的文章就介紹到這了,更多相關(guān)c++ 子類構(gòu)造函數(shù)初始化及父類構(gòu)造初始化內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C語言數(shù)據(jù)結(jié)構(gòu)與算法時(shí)間空間復(fù)雜度基礎(chǔ)實(shí)踐

    C語言數(shù)據(jù)結(jié)構(gòu)與算法時(shí)間空間復(fù)雜度基礎(chǔ)實(shí)踐

    這篇文章主要為大家介紹了C語言數(shù)據(jù)結(jié)構(gòu)與算法中時(shí)間空間復(fù)雜度的基礎(chǔ)實(shí)踐,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步
    2022-02-02
  • 深度理解c++中的this指針

    深度理解c++中的this指針

    這篇文章主要介紹了C++編程指向成員的指針以及this指針的基本使用指南,與C語言一樣,存儲(chǔ)的數(shù)值被解釋成為內(nèi)存里的一個(gè)地址,需要的朋友可以參考下。
    2016-07-07
  • C++整數(shù)常量的前綴和后綴的示例代碼

    C++整數(shù)常量的前綴和后綴的示例代碼

    這篇文章主要介紹了C++整數(shù)常量的前綴和后綴,本文通過示例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-07-07
  • c語言++放在前面和后面的區(qū)別分析

    c語言++放在前面和后面的區(qū)別分析

    在C語言中,前綴自增(++i)和后綴自增(i++)操作符并不是同一個(gè)操作符,前綴自增操作符的優(yōu)先級(jí)高于后綴自增,同時(shí)得到的結(jié)果并不完全一致,因此需要區(qū)分
    2015-11-11
  • 基于VC編寫COM連接點(diǎn)事件的分析介紹

    基于VC編寫COM連接點(diǎn)事件的分析介紹

    本篇文章是對(duì)VC編寫COM連接點(diǎn)事件進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-05-05
  • C/C++實(shí)現(xiàn)投骰子游戲

    C/C++實(shí)現(xiàn)投骰子游戲

    這篇文章主要為大家詳細(xì)介紹了C/C++實(shí)現(xiàn)投骰子游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-11-11
  • C++之try catch 異常處理入門實(shí)例

    C++之try catch 異常處理入門實(shí)例

    我們通常希望自己編寫的程序能夠在異常的情況下也能作出相應(yīng)的處理,而不至于程序莫名其妙地中斷或者中止運(yùn)行了。在設(shè)計(jì)程序時(shí)應(yīng)充分考慮各種異常情況,并加以處理
    2018-01-01
  • c++版線程池和任務(wù)池示例

    c++版線程池和任務(wù)池示例

    這篇文章主要介紹了c++版線程池和任務(wù)池,實(shí)現(xiàn)任務(wù)執(zhí)行完畢線程退出.在linux下壓力測(cè)試通過
    2014-03-03
  • C++筆記-設(shè)置cout輸出數(shù)據(jù)的寬度和填充方式

    C++筆記-設(shè)置cout輸出數(shù)據(jù)的寬度和填充方式

    這篇文章主要介紹了C++筆記-設(shè)置cout輸出數(shù)據(jù)的寬度和填充方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-11-11
  • C語言編程PAT乙級(jí)學(xué)習(xí)筆記示例分享

    C語言編程PAT乙級(jí)學(xué)習(xí)筆記示例分享

    這篇文章主要為大家介紹了C語言編程PAT乙級(jí)學(xué)習(xí)筆記實(shí)現(xiàn)示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-05-05

最新評(píng)論