溫馨提示×

溫馨提示×

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

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

C++中的多態(tài)詳解

發(fā)布時間:2020-06-27 19:53:26 來源:網(wǎng)絡(luò) 閱讀:6686 作者:龍躍十二 欄目:編程語言

[TOC]
#虛函數(shù)和多態(tài)

虛函數(shù)

定義:類的成員函數(shù)前面加virtual關(guān)鍵字,則這個成員函數(shù)稱為虛函數(shù)。

###代碼示例:

class Person
{
public:
    virtual void Buyticket()
    {
        cout << "買票—全價" << endl;
    }
protected:
    char* _name;
};

虛函數(shù)重寫

定義:當(dāng)在子類的定義了一個與父類完全相同的虛函數(shù)時,則稱子類的這個函數(shù)重寫(也稱覆蓋)了父類的這個虛函數(shù)。

代碼示例:

class Person
{
public:
    virtual void Buyticket()
    {
        cout << "買票—全價" << endl;
    }
protected:
    char* _name;
};

class Student : public Person
{
public:
    virtual void Buyticket()
    {
        cout << "買票—半票" << endl;
    }
protected:
    char* _name;
};

##多態(tài)
###定義:一個對象呈現(xiàn)多種形態(tài)
###代碼示例:

class Person
{
public:
    virtual void Buyticket()
    {
        cout << "買票—全價" << endl;
    }
protected:
    char* _name;
};

class Student : public Person
{
public:
    virtual void Buyticket()
    {
        cout << "買票—半票" << endl;
    }
protected:
    char* _name;
};

void Fun(Person &p)//一個函數(shù)實現(xiàn)兩種形態(tài)
{
    p.Buyticket();
}

int main()
{
    Person p;
    Student s;
    Fun(p);
    Fun(s);
    system("pause");
    return 0;
}

看看多態(tài)的結(jié)果:
C++中的多態(tài)詳解

多態(tài)的的特性:

  1. 派生類重寫基類的虛函數(shù)實現(xiàn)多態(tài),要求函數(shù)名、參數(shù)列表、返回值完全相同。(協(xié)變除外)
    1. 基類中定義了虛函數(shù),在派生類中該函數(shù)始終保持虛函數(shù)的特性。
    2. 只有類的成員函數(shù)才能定義為虛函數(shù)。
    3. 靜態(tài)成員函數(shù)不能定義為虛函數(shù)。
    4. 如果在類外定義虛函數(shù),只能在聲明函數(shù)時加virtual,類外定義函數(shù)時不能加virtual。
    5. 構(gòu)造函數(shù)不能為虛函數(shù),雖然可以將operator=定義為虛函數(shù),但是最好不要將operator=定義為虛函數(shù),因為容易使用時容易引
      起混淆。
    6. 不要在構(gòu)造函數(shù)和析構(gòu)函數(shù)里面調(diào)用虛函數(shù),在構(gòu)造函數(shù)和析構(gòu)函數(shù)中,對象是不完整的,可能會發(fā)生未定義的行為。
    7. 最好把基類的析構(gòu)函數(shù)聲明為虛函數(shù)。(why?另外析構(gòu)函數(shù)比較特殊,因為派生類的析構(gòu)函數(shù)跟基類的析構(gòu)函數(shù)名稱不一樣,但
      是構(gòu)成覆蓋,這里是因為編譯器做了特殊處理)
向AI問一下細節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI