2011-12-13 1147 views

回答

6

這意味着成員函數是純虛擬,這意味着它根本沒有實現。因此,該類不能實例化(它變成「抽象的」),並且它只能用作基類,其派生類必須(最終)實現虛擬成員函數。

一個例子是具有純虛擬成員函數的抽象Animalfeed():因爲每個動物總是一個具體(即派生的)動物的實例,所以不能存在純粹的抽象動物。儘管動物有某種飼養方式,但沒有普遍的基礎實施方式,這對每隻動物都很常見 - 我們只知道feed()存在,但它必須始終具體地由具體的衍生動物來實施。

(請注意,您可以實際上提供了一個純虛函數的實現。你仍然不能實例化這樣一個類,但是派生類可以調用基函數,這是很少有用的,大概的風格差。 )

+0

如果我不得不猜測,我會說'= 0'反映了類vtable中函數指針爲空的事實,但我不知道這實際上是如何實現純虛函數... –

+1

我認爲你的筆記文本需要更大一點,因爲可以有一個純虛擬方法的實現 - 這裏的許多其他答案指出,純虛擬意味着「沒有實現」,這是不正確的。 – franji1

+0

@ franji1:也許吧,但它確實不是一件非常有用的事情...... –

1

這就是所謂的「純虛函數」,它是如何構造抽象類的。有關更多詳細信息,請參閱the wikipedia article

要使用您的示例,請在KeyboardListener類中聲明keyPressed(void)函數,但未實現 - 即將其視爲接口的一部分,並且子類需要實現函數*,但是父類本身不是。不能創建父類的實例 - 父類只能用作指向完全定義的子類的實例的指針。

*話雖這麼說,子類不需要來實現它 - 但如果他們不,你不能實例化這些子類要麼,只有他們的子孫終於實現keyPressed(void)

1

你必須在派生類中實現這個功能,它是純粹的虛擬(正如其名字),並沒有實現(這是由零,= 0)(有時暗示他們可以在那裏實現)。具有純虛函數的類被稱爲抽象基類或類似的。他們不能被實例化。

要利用它們,您必須下劃分抽象類並在派生類中實現純虛方法。

1

= 0表示功能爲純虛擬而不是純虛擬。該= 0推遲定義一個函數體到派生類。

的區別使得其含有純虛功能的抽象一個不能被實例化,僅延伸到一個適當的類,它可以是類,只要純虛功能被給予體。這通常與純虛擬析構函數一起使用,因爲每個派生類自動提供一個默認析構函數。

https://stackoverflow.com/a/1219618/866333

注:析構函數,即使它是純虛,唯一的方法都必須有一個執行情況,以便爲它的定義中是有用的類(是純虛函數可以有實現)。

相關問題