真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

C++中的虛函數(shù)純虛函數(shù)虛基類(virtual)-創(chuàng)新互聯(lián)

C++中的 虛函數(shù) 純虛函數(shù) 虛基類(virtual)
前言:需要了解三者的區(qū)別,必須要掌握多態(tài)的三個必要條件:

10年積累的網(wǎng)站建設、成都網(wǎng)站設計經(jīng)驗,可以快速應對客戶對網(wǎng)站的新想法和需求。提供各種問題對應的解決方案。讓選擇我們的客戶得到更好、更有力的網(wǎng)絡服務。我雖然不認識你,你也不認識我。但先網(wǎng)站設計后付款的網(wǎng)站建設流程,更有木壘哈薩克免費網(wǎng)站建設讓你可以放心的選擇與我們合作。
  1. 繼承
  2. 重載
  3. 父類指針指向子類對象。

虛函數(shù) 純虛函數(shù) 虛基類三者區(qū)別

1.虛函數(shù)是用于多態(tài)中virtual修飾父類函數(shù),確保父類指針調(diào)用子類對象時,運行子類函數(shù)的。
2.純虛函數(shù)是用來定義接口的,也就是基類中定義一個純虛函數(shù),基類不用實現(xiàn),讓子類來實現(xiàn)。
3.虛基類是用來在多繼承中,比如菱形繼承中,如果兩個父類繼承自同一個類,就只實例化一個父類

①虛函數(shù)
第一個是沒有使用多態(tài)(只用繼承)的一般實現(xiàn)方式:

class A  
{  
public:  
    void printf(){  
        cout<<"printf A"<printf();  
    B *b = new B();  
    b->printf();  
    return 0;  
}

結果:

printf A
printf B

這是早期沒有多態(tài)的代碼,缺點:代碼冗余
下面是使用了多態(tài)但是沒有引用virtual關鍵字的情況:

int main(int argc, const char * argv[])  
{  
    A *a = new B();  
    a->printf();  
    return 0;  
}

結果:

printf A

因為類的定義都一樣,所以就沒再寫出來了,當父類指針指向子類對象的時候,如果不使用virtual,父類調(diào)用方法的時候還是調(diào)用了父類自己的方法,沒有調(diào)用子類重寫的方法,所以就沒有實現(xiàn)到多態(tài)的作用,我們再來在父類中試試加入virtual關鍵字看看:

class A  
{  
public:  
virtual void printf(){  
        cout<<"printf A"<printf();  
    return 0;  
}

結果

printf B

virtual是加入到父類中的,子類的代碼盡量加上virtual(方便被繼承的子類實現(xiàn)多態(tài)),也可以不加,main函數(shù)還是父類指針指向子類對象,結果終于可以打印到子類重寫的方法了,所以證實了虛函數(shù)是用于多態(tài)中virtual修飾父類該重寫的函數(shù),確保父類指針調(diào)用子類對象時運行子類函數(shù)的。
② 純虛函數(shù)
純虛函數(shù)就是抽象接口,使用了純虛函數(shù)的類不能被實例化,定義了純虛函數(shù)的類不用寫純虛函數(shù)的實現(xiàn),由子類實現(xiàn),下面看代碼:

class A  
{  
public:  
    virtual void printf() =0;  
};  
void A::printf()//純虛函數(shù)可以不寫實現(xiàn)  
{  
    cout<<"printf A"<printf();  
    return 0;  
}

virtual void printf() = 0;這是虛函數(shù)的寫法,我在下面寫了虛函數(shù)的實現(xiàn) void A::printf(),其實寫不寫都沒關系,寫了也起不了作用,然后我才main函數(shù)中嘗試吧純虛函數(shù)的類實例化,結果直接報錯,說明純虛函數(shù)是不能實例化的。

int main(int argc, const char * argv[])  
{  
    A *a =newB();//這里使用了多態(tài)  
    a->printf();  
    return 0;  
}

結果:

printf B

把main函數(shù)的a指向了子類的對象,結果可以正確打印出子類的方法。由此說明了純虛函數(shù)也是為多態(tài)服務的,它的作用是定義一個接口,讓子類去實現(xiàn)。
③虛基類
虛基類是c++獨有的東西,因為c++中有多繼承,也是關鍵字virtual相關的定義。

先來說說多繼承,如果爺爺類(暫把父類的父類暫定為爺爺類 ),父類繼承自爺爺類。如果孫類繼承自多個父類(聽起來有點怪異),那么如果不使用虛基類,就會實例化多個爺爺類對象(越說越離奇),編譯器會報錯,說有歧義性。如果父類繼承自虛基類,則可以解決多個父類不會實例化多個爺爺?shù)膯栴},就是只有一個爺爺。

class Grandfather{  
public:  
    int flag;  
    Grandfather(){  
        flag = 1;  
    }  
};  
class Father1:public Grandfather{  
public:  
    Father1(){  
        flag = 2;  
    }  
};  
class Father2:public Grandfather{  
public:  
    Father2(){  
        flag = 3;  
    }  
};  
class Son:public Father1,public Father2{  
};  
int main(int argc, const char * argv[])  
{  
    Son *son = new Son();  
    cout<flag<

如果沒有使用虛基類,多個父類繼承自同一個爺爺類,就會產(chǎn)生歧義,為了不產(chǎn)生歧義,代碼可改為(治標不治本):

cout<Father1::flag<Father2::flag<

如果父類繼承虛基類就不同了:

class Grandfather{  
public:  
    int flag;  
    Grandfather(){  
        flag = 1;  
        cout<<"Grandfather flag = "<總的來說,虛函數(shù) ,純虛函數(shù)是為了多態(tài)服務,虛基類是為了只實例化一次基類存在的

另外有需要云服務器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務器、裸金屬服務器、高防服務器、香港服務器、美國服務器、虛擬主機、免備案服務器”等云主機租用服務以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應用場景需求。


當前名稱:C++中的虛函數(shù)純虛函數(shù)虛基類(virtual)-創(chuàng)新互聯(lián)
文章地址:http://weahome.cn/article/eopds.html

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部