2017-09-23 122 views
-2

考慮如何在派生類中實現純虛函數作爲另一個純虛函數?

class A 
{ 
protected: 
virtual void function() =0; 
} 

class B: public class A 
{ 
protected: 
virtual void function() { blah blah blah }; 
} 

我想使()函數中的B級也是一個純虛函數。也就是說,B的派生類必須再次實現function()。我該如何執行此任務?

+6

是什麼阻止你?你有什麼嘗試? –

回答

-1

沒有實現所有基類的純虛方法的任何派生類都是抽象類,所以您不能實例化它。所以你必須實施後者。

  • 聲明繼承的類時,也刪除關鍵字class

    class B: public class A 
    

爲:

class B: public A { 

}; 

另外分號不是冗餘所以它添加到的每個端部類聲明。

class A{ 
     public: 
      virtual void function() =0; 
    }; 

    class B: public A { 
     public: 
      virtual void function()= 0; // B is an ADT due to this pure method function. 
    }; 

    void B::function() { 
      std::cout << "B::function()" << std::endl; 
    }; 

    class C : public B{ 
     public: 
      void function(){ 
        B::function(); 
        std::cout << "C::funtion()" << std::endl; 
      } 
    }; 

    int main(){ 

    // A aObj; // error 
    // B bObj; // error 
     C cObj; // correct 
     cObj.function(); 

     return 0; 
    } 
  • 正如你可以在B類看到我做的方法function純所以它不能被實例化。我還爲它添加一個定義,以便派生類的對象可以爲chain up提供功能。

,您還可以將ADT:

class B : public A{ 
    // it is sufficient to make it ADT by not implementing the base pure method function. 
}; 
+0

您無法立即定義純虛函數... – Rakete1111

+0

@ Rakete1111:您的證明是什麼? - 「鏈接」呢? – Raindrop7

+0

該語言不允許它([ref](http://eel.is/c++draft/class#mem-11.sentence-3))。這與「鏈接」無關,「virtual void f()= 0 {}'是無效的C++。 – Rakete1111