【入門篇】虛函數、純虛函數、抽象類

一、基本概念

1、虛函數

在類的成員函數前冠以 virtual 關鍵字的函數叫做虛函數。虛函數是實現運行時多態的基礎,可以像普通函數一樣被重載,也可以在派生類中被重寫。

2、純虛函數

純虛函數是指只有函數體,沒有定義函數體的成員函數。純虛函數作爲接口而存在,並不具備具體函數功能。

從基類繼承來的純虛函數,在派生類中仍是純虛函數。

3、抽象類

如果一個類中至少有一個純虛函數,那麼這個類被稱爲抽象類。這種類不能被實例化,但允許聲明一個指向抽象類的對象的指針。

抽象類派生的類如果不對基類的純虛函數進行重寫的話,派生類依然是一個抽象類,只有它重寫了其基類的純虛函數之後它纔不再是一個抽象類。

4、虛基類

如果一個類的所有方法都是純虛的,這個類就被叫做虛基類。

二、代碼演示

1、虛函數

class Test {
public:
    virtual void funTest() {  //虛函數
        printf("test...\n");
    }
    ……
};

2、純虛函數

class Test {
public:
    virtual void funTest() = 0; // 純虛函數
    ……
};

3、抽象類

class Test {  // 抽象類
public:
    virtual void funTest() = 0;
    ……
};


Test t;  // 錯誤,抽象類不可被實例化
Test * t = NULL;  // 正確,可以定義一個抽象類的指針

4、虛基類

class Test {  // 虛基類
public:
    virtual void funTest1() = 0;
    virtual void funTest2() = 0;
};

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章