91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

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

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

C++ 繼承(二)

發布時間:2020-07-05 14:15:14 來源:網絡 閱讀:405 作者:Aonaufly 欄目:移動開發

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

來一段基本代碼:

#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++ 繼承(二)

解析 :

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

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

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

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

C++ 繼承(二)


如果,在子類中不重寫虛函數 :

#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++ 繼承(二)

解析:

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


純虛函數 -> 沒有實現的函數

#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++ 繼承(二)

解析:

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

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


重點補充:

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

② 特殊情況:

#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++ 繼承(二)

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


虛析構

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

#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與一個參數a,使用D.a就會造成歧義(從B,C繼承了2個a)。那么B,C都要使用虛繼承

class B : virtual public A

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

向AI問一下細節

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

AI

怀来县| 普安县| 西宁市| 新宁县| 和田市| 页游| 江达县| 西贡区| 旬阳县| 景洪市| 云梦县| 曲阜市| 义乌市| 镇宁| 商丘市| 贡山| 镇平县| 徐水县| 临朐县| 天峻县| 扎兰屯市| 浠水县| 宁明县| 台北市| 榆树市| 玉山县| 大竹县| 若羌县| 巴里| 乌恰县| 屯留县| 建德市| 滕州市| 化德县| 宽甸| 博湖县| 息烽县| 布拖县| 应城市| 连云港市| 多伦县|