在做c++ primer plus第13章課後習題三時,使用到了抽象基類的概念,需要在抽象基類中新增乙個virtual view()方法,用來顯示物件資訊。當時記得書上說:
(1) 在虛函式宣告後面加上=0,可以使該類變為抽象類,抽象類只能作為基類,不能建立抽象類的物件。
(2) 抽象基類中至少使用乙個純虛函式的介面。從抽象基類派生出來的類將根據派生類的特徵,是用常規虛函式來實現這種介面。
(3) 派生類物件不能強制型別(向上轉換)轉換為抽象基類,因為抽象基類不能建立物件。
(4) 補充:基類中的友函式不能宣告為虛函式(virtual friend 是錯的),因為c++不支援友元函式的繼承,對於沒有繼承特性的函式沒有虛函式的說法。友元函式不屬於類的成員函式,不能被繼承。
關於純虛函式,在抽象基類中是否可以提供其實現呢?書上只說了:在抽象基類中可以不定義該函式。那就是說也可以在抽象基類中提供純虛函式的實現咯。在網上的帖子中找到了一些有用的東西,抄錄如下:(注意:提供抽象基類的純虛函式的實現是乙個很好地程式設計習慣,實在感覺沒必要提供實現時,可用空函式來處理。virtual fun = 0 {})。
虛基類 純虛函式 抽象類
虛基類 純虛函式和抽象類 1 虛基類 在 多繼承 中講過的例子中,由類a,類b1和類b2以及類c組成了類繼承的層次結構。在該結構中,類c的物件將包含兩個類a的子物件。由於類a是派生類c兩條繼承路徑上的乙個公共基類,那麼這個公共基類將在派生類的物件中產生多個基類子物件。如果要想使這個公共基類在派生類中...
純虛函式和抽象基類
純虛函式的格式 virtual 型別 函式名 參數列 0 而我們的純虛函式經常被用來構建抽象基類。抽象基類 當我們僅想對基類進行向上型別轉換,使用它的介面,而不希望使用者實際地建立乙個基類的物件,那麼我們就在基類中加入至少乙個純虛函式 pure virtual function 來使基類稱為抽象 a...
純虛函式和抽象基類
純虛函式就是基類只定義了函式體,沒有具體的實現過程,必須在子類中加以實現。如果基類中含有乙個或多個純虛函式,那麼它就屬於抽象基類,不能被例項化。1 引入抽象基類和純虛函式的原因有以下兩點 1 為了方便的是使用多型特性 2 在很多情況下,基類本身生成物件是不合情理的。抽象基類不能夠被例項化,它定義的純...