天天看點

C++中的虛函數和純虛函數用法

 1. 虛函數和純虛函數可以定義在同一個類(class)中,含有純虛函數的類被稱為抽象類(abstract class),而隻含有虛函數的類           (class)不能被稱為抽象類(abstract class)。

 2. 虛函數可以被直接使用,也可以被子類(sub class)重載以後以多态的形式調用,而純虛函數必須在子類(sub class)中實作該函數才可以使用,因為純虛函數在基類(base class)

隻有聲明而沒有定義。

 3. 虛函數和純虛函數都可以在子類(sub class)中被重載,以多态的形式被調用。

 4. 虛函數和純虛函數通常存在于抽象基類(abstract base class -ABC)之中,被繼承的子類重載,目的是提供一個統一的接口。

 5. 虛函數的定義形式:virtual    {method body} 

       純虛函數的定義形式:virtual    { } = 0; 

       在虛函數和純虛函數的定義中不能有static辨別符,原因很簡單,被static修飾的函數在編譯時候要求前期bind,然而虛函數卻是動态綁定(run-time bind),而且被兩者修飾的函數生命周期(life recycle)也不一樣。

 6. 如果一個類中含有純虛函數,那麼任何試圖對該類進行執行個體化的語句都将導緻錯誤的産生,因為抽象基類(ABC)是不能被直接調用的。必須被子類繼承重載以後,根據要求調用其子類的方法。

       以下為一個簡單的虛函數和純虛寒數的使用示範,目的是抛磚引玉!

#include 

//father class

class Virtualbase

{

public:

        virtual   void  Demon()= 0;        //prue virtual function

        virtual   void  Base() {cout<<"this is farther class"<};

//sub class

class SubVirtual  :public Virtualbase

{

public:

    void Demon() { cout<<" this is SubVirtual!"<        void Base()  { 

cout<<"this is subclass Base"<};

void main()

{

        Virtualbase* inst = new SubVirtual(); //multstate pointer

        inst->Demon();

        inst->Base();

 //   inst = new Virtualbase();

//        inst->Base()

        return ;

}