程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> C++ 虛函數與純虛函數

C++ 虛函數與純虛函數

編輯:C++入門知識

今天講講C++中,虛函數與純虛函數的用法和區別。     虛函數的提出在我上一篇關於C++的文章中已經提過,是為了解決多繼承的二義性而提出的,今天不再贅述;   而純虛函數是一種特殊的函數,它的作用是在基類中不給出有意義的實現,而把說明成純虛函數,它的實現留給該基類的派生類去做。包含純虛函數的類就是抽象類,抽象類不能被實例化,但是可以定義指向抽象類數據的指針變量,當派生類稱為具體類後,就可以用這種指針指向派生類的對象,然後通過該指針調用虛函數,實現多態操作。   虛函數和純虛函數的書寫格式類似於下面:         [cpp]  class Student      {          virtual char * test();     //虛函數           virtual char * Category() =0;  //純虛函數       };       class Student     {         virtual char * test();     //虛函數         virtual char * Category() =0;  //純虛函數     };   虛函數可以被直接調用,也可以備子類重載以後以多態的形式調用,而純虛函數必須在子類中實現該函數才可以使用,因為純虛函數在基類只有聲明而沒有定義。   虛函數和純虛函數的定義中不能有static 標識符,原因很簡單,被static修飾的函數在編譯時候要求前期綁定,然而虛函數確實動態綁定,而且被兩者修飾的函數生命周期也不一樣。   如果一個類中含有純虛函數,那麼任何試圖對該類進行實例化的語句都將導致錯誤的產生,因為抽象基類不能被直接調用,必須呗子類集成重載以後,根據要求調用其子類的方法。         [cpp]   class StudentA      {   public:       virtual void funOne() = 0;  // 說明fun函數為純虛函數        virtual void funTwo();   };      class StudentB   {   public:      virtual void funOne();      virtual void funTwo();   };      // CA,CB類的實現    ...      void main()   {       StudentA xiaoliu;   // 不允許,因為類CA中有純虛函數        StudentB xiaoxin;   // 可以,因為類CB中沒有純虛函數        ...   }     class StudentA    { public:     virtual void funOne() = 0;  // 說明fun函數為純虛函數     virtual void funTwo(); };   class StudentB { public:    virtual void funOne();    virtual void funTwo(); };   // CA,CB類的實現 ...   void main() {     StudentA xiaoliu;   // 不允許,因為類CA中有純虛函數     StudentB xiaoxin;   // 可以,因為類CB中沒有純虛函數     ... }    

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved