成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

C++繼承(二)

多態(tài)是一種泛型編程的思想,虛函數(shù)是其實現(xiàn)的手段(利用父類的指針指向子類的空間)。好了 , 開始正文->

吳中ssl適用于網(wǎng)站、小程序/APP、API接口等需要進行數(shù)據(jù)傳輸應用場景,ssl證書未來市場廣闊!成為創(chuàng)新互聯(lián)的ssl證書銷售渠道,可以享受市場價格4-6折優(yōu)惠!如果有意向歡迎電話聯(lián)系或者加微信:028-86922220(備注:SSL證書合作)期待與您的合作!

來一段基本代碼:

#include <iostream>
using namespace std;
class CPeople
{
public:
    virtual void goHome()
    {
        cout << " Go Home" << endl;
    }
};
class Aonaufly : public CPeople
{
    void goHome()
    {
        cout << " Go Wuhan" << endl;
    }
};
int main()
{
    CPeople * people_1 = new Aonaufly;
    people_1->goHome();
    delete people_1;
    return 0;
}

運行結果:

C++ 繼承(二)

解析 :

① 虛函數(shù)的關鍵字是 : virtual (定義格式 : virtual void goHome())

② 子類中也有一個goHome函數(shù),因為在父類中goHome函數(shù)是個虛函數(shù)。所以子類中的goHome 與 父類中的goHome形成了重寫。(虛函數(shù)形成重寫 , 普通函數(shù)形成覆蓋)

③ CPeople * people_1 = new Aonaufly; 即用 利用父類的指針指向子類的空間。(不能申明為棧 , 因為棧區(qū)隊形沒有指針概念)這種形式在C# / Java當中也很常見

④ 實際上在子類中的virtual可以省略不寫,編譯會自動加上

C++ 繼承(二)

如果,在子類中不重寫虛函數(shù) :

#include <iostream>
using namespace std;
class CPeople
{
public:
    virtual void goHome()
    {
        cout << " Go Home" << endl;
    }
};
class Aonaufly : public CPeople
{
};
int main()
{
    CPeople * people_1 = new Aonaufly;
    people_1->goHome();
    delete people_1;
    return 0;
}

結果:

C++ 繼承(二)

解析:

① 因為子類沒有重寫父類虛函數(shù)goHome,所以調用父類的goHome

純虛函數(shù) -> 沒有實現(xiàn)的函數(shù)

#include <iostream>
using namespace std;
class CPeople
{
public:
    virtual void goHome() = 0;
};
class Aonaufly : public CPeople
{
    virtual void goHome()
    {
        cout << " Go Wuhan" << endl;
    }
};
int main()
{
    CPeople * people_1 = new Aonaufly;
    people_1->goHome();
    delete people_1;
    return 0;
}

結果:

C++ 繼承(二)

解析:

① 純虛函數(shù) virtual void goHome() = 0 。一個父類中都是純虛函數(shù),這個類就是接口類 ; 如果這個父類不全是純函數(shù)那這個父類就是抽象類。

② 有純虛函數(shù)的類 , 不能被實例化 。只能通過繼承 , 在子類中實現(xiàn)(必須在子類中重寫)

重點補充:

① 重寫虛函數(shù) , 函數(shù)名稱 /  函數(shù)參數(shù)列表 / 函數(shù)返回值類型必須是一樣(絕大部分情況 )

② 特殊情況:

#include <iostream>
using namespace std;
class CPeople
{
public:
    virtual CPeople& goHome()
    {
        cout << " Go Home" << endl;
        return (*this);
    }
};
class Aonaufly : public CPeople
{
    virtual Aonaufly& goHome()
    {
        cout << " Go Wuhan" << endl;
        return (*this);
    }
};
int main()
{
    CPeople * people_1 = new Aonaufly;
    people_1->goHome();
    delete people_1;
    return 0;
}

結果:

C++ 繼承(二)

這是一個特殊的情況返回值不一樣也會構成重寫 , 這個情況叫協(xié)變。

虛析構

為了時子類,父類中的機構函數(shù)都被調用,需要使用虛析構(不然 , 只會調用父類的的 )

#include <iostream>
using namespace std;
class CPeople
{
public:
    virtual CPeople& goHome()
    {
        cout << " Go Home" << endl;
        return (*this);
    }
    virtual ~CPeople()
    {
        cout << "Cpeople" << endl;
    }
};
class Aonaufly : public CPeople
{
    virtual Aonaufly& goHome()
    {
        cout << " Go Wuhan" << endl;
        return (*this);
    }
    ~Aonaufly()
    {
        cout << "Aonaufly" << endl;
    }
};
int main()
{
    CPeople * people_1 = new Aonaufly;
    //people_1->goHome();
    delete people_1;
    return 0;
}

結果:

C++ 繼承(二)

關于虛繼承

存在多繼承的時候一定要使用虛繼承

B,C繼承于A 。 D繼承B和C。若A與一個參數(shù)a,使用D.a就會造成歧義(從B,C繼承了2個a)。那么B,C都要使用虛繼承

class B : virtual public A

虛繼承 只是繼承使用權(相當于指針),并不復制A中的a

新聞名稱:C++繼承(二)
標題路徑:http://jinyejixie.com/article8/iiciop.html

成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供企業(yè)建站、網(wǎng)站設計公司、網(wǎng)站營銷、Google、品牌網(wǎng)站設計、響應式網(wǎng)站

廣告

聲明:本網(wǎng)站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經(jīng)允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)

營銷型網(wǎng)站建設
黄大仙区| 齐河县| 伊宁市| 奉节县| 岱山县| 湖北省| 新田县| 双流县| 长顺县| 和平县| 宿州市| 吉林省| 乌拉特中旗| 安吉县| 宣化县| 石屏县| 霞浦县| 科技| 德钦县| 宜都市| 肥城市| 阿鲁科尔沁旗| 新乡市| 丰宁| 湘乡市| 巴马| 长岛县| 六枝特区| 莲花县| 隆安县| 潼关县| 北辰区| 霸州市| 金山区| 东乌珠穆沁旗| 汕尾市| 南康市| 磐安县| 保定市| 平塘县| 遂宁市|