純虛函數與抽象基類

純虛函數:C++中可以定義這樣一類函數,這樣的函數可以沒有實現。我們把這樣的函數稱爲純虛函數。

純虛函數有什麼意義
      通過它可以指明一個虛擬函數只是提供了一個可被子類型改寫的接口。

  純虛函數是在基類中聲明的虛函數,它可以在基類中有定義,而且派生類必須定義自己的實現方法。基類不能生成對象,可以使用指針或者引用派生類對象。基類不在基類中實現純虛函數的方法是在函數原型後加“=0”

  virtual void funtion1()=0

引入原因/純虛函數的作用:
1、爲了方便使用多態特性,我們常常需要在基類中定義虛擬函數。
      在很多情況下,基類本身生成對象是不合情理的。例如,動物作爲一個基類可以派生出老虎、孔雀等子類,但動物本身生成對象明顯不合常理。
  爲了解決上述問題,引入了純虛函數的概念,將函數定義爲純虛函數,則編譯器要求在派生類中必須予以重寫以實現多態性。

那麼怎樣定義純虛函數呢?
virtual ReturnType FunctionName()= 0;

舉個栗子

#include <iostream>
#include <string>
using namespace std;

class Animal
{
public:
    Animal(string _name)
    {
        name = _name;
    }
    virtual void eat() = 0;     //聲明純虛函數,純虛函數可以不用實現
private:
    string name;
};

class Cat : public Animal
{
public:
    Cat(string name) : Animal(name)
    {}
    virtual void eat()//實現父類的純虛函數,
    {
        cout << "貓吃老鼠" << endl;
    }
};

int main()
{
    Cat a("tom");
    a.eat();
    return 0;
}

同時含有純虛擬函數的類稱爲抽象類,它不能生成對象。這樣就很好地解決了上述兩個問題。抽象類都是作爲基類來使用的。所以我這兒稱之爲抽象基類。

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