中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

C++繼承 總結

發布時間:2020-06-13 15:00:24 來源:網絡 閱讀:402 作者:I慕藍 欄目:編程語言

一、認識繼承

   什么是繼承呢,就是一個對象有另一個對象的所有特征,并且在這些特征上還有新的屬于自己的特征,則一個對象就是另一個對象的繼承。比如兒子繼承父親的相貌之外還有自己的相貌特征。在C++中,繼承是面向對象復用的重要手段。通過繼承定義一個類,它們的類型之間的關系建模,共享公有的東西,實現各自本質不同的東西。

二、繼承的作用

   打個比方,你描述了狗這個對象,對于黑狗,只需描述狗是黑的這一特征,并不需要再去把狗描述一遍。因為黑狗繼承了狗的所有特征,并且擁有自己是“黑”的這一特征。對于這樣的繼承,我們可以利用過去的類建立新的類,節省編程工作量,減少冗余代碼。

三、繼承關系

    我們都知道,在類中,有public,private,protected三種成員訪問限定符,對于繼承來的子類,它的成員又有怎樣的訪問限定呢?我們通過一個表來說明一下。

C++繼承 總結


同時,我們通過實例來看一下他們之間的相互繼承關系

class Base

{

public:

    Base()

    {

         cout<<"B()" <<endl;

    }


    ~Base ()

    {

         cout<<"~B()" <<endl;

    }


    void ShowBase()

    {

         cout<<"_pri = " <<_pri<< endl;

         cout<<"_pro = " <<_pro<< endl;

         cout<<"_pub = " <<_pub<< endl;

    }


private:

    int _pri;

protected:

    int _pro;

public:

    int _pub;

};


class Derived:public Base

{

public:

    Derived()

    {

         cout<<"D()"<<endl;

    }


    ~Derived ()

    {

         cout<<"~D()"<<endl;

    }


    void ShowDerived()

    {

        

         cout<<"_pri = "<<_pri<<endl;

 cout<<"_pro = "<<_pro<<endl;

 cout<<"_pub = "<<_pub<<endl;


         cout<<"_d_pri = "<<_d_pri<< endl;

         cout<<"_d_pro = "<<_d_pro<< endl;

         cout<<"_d_pub = "<<_d_pub<< endl;

    }


private:

    int _d_pri;

protected:

    int _d_pro;

public:

    int _d_pub;

};

對于代碼中的綠色的一行,顯然是不能夠被編譯通過的,因為他在父類中的成員數據是private的,父類的私有成員在派生類中是不能被訪問的。

四、派生類的默認成員函數

    派生類也是類,也擁有類的默認成員函數,構造函數,拷貝構造函數,析構函數,賦值運算符重載,取地址符重載,const修飾的取地址操作符重載。

    在類中,構造函數有著調用順序,對于繼承關系中的構造函數調用順序又將是是怎樣的呢?我們來看一下。

C++繼承 總結

同時析構函數的調用順序如下圖

C++繼承 總結我們在通過代碼實例來看一下構造,析構函數得調用順序

class B

{

public:

int data1;

};


class B1: virtual public B

{

public:

int data2;

};


class B2: virtual public B

{

public:

int data3;

};


class D:public B1, public B2

{

public:

void FunTest()

{

B1::data1 = 0x01;

data2 = 0x02;

B2::data1 = 0x03;

data3 = 0x04;

data4 = 0x05;

cout<<this<<endl;

cout<<&B1::data1<<endl;

cout<<&data2<<endl;

cout<<&B2::data1<<endl;

cout<<&data3<<endl;

cout<<&data4<<endl;

cout<<data1<<endl;

}

int data4;

};


int main()

{

  cout<<sizeof(B)<<endl;

  cout<<sizeof(B1)<<endl;

  cout<<sizeof(B2)<<endl;

  cout<<sizeof(D)<<endl;

D d;

d.FunTest();

return 0;

}

五、單繼承與多繼承

  1. 單繼承--一個子類只有一個直接父類時稱這個繼承關系為單繼承

  2. 多繼承--一個子類有兩個或以上直接父類時稱這個繼承關系為多繼承































向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

汉川市| 本溪| 商丘市| 兴山县| 沂水县| 贵溪市| 花莲市| 定日县| 怀远县| 永济市| 广昌县| 新兴县| 东乡| 凤台县| 宁强县| 灵丘县| 西安市| 玛沁县| 甘洛县| 耿马| 武山县| 城固县| 钦州市| 北海市| 沙坪坝区| 东源县| 卢氏县| 荆州市| 怀远县| 留坝县| 青岛市| 彰化市| 封开县| 澎湖县| 定陶县| 博野县| 宜城市| 吉木萨尔县| 济南市| 什邡市| 肥乡县|