將breathe()函數申明為純虛函數,結果如例2-18所示。
例2-18
class animal
{
public:
void eat()
{
cout<<"animal eat"<<endl;
}
void sleep()
{
cout<<"animal sleep"<<endl;
}
virtual void breathe() = 0;
};
純虛函數是指被標明為不具體實現的虛成員函數(注意:純虛函數也可以有函數體,但這種提供函數體的用法很少見)。純虛函數可以讓類先具有一個操作名稱,而沒有操作內容,讓派生類在繼承時再去具體地給出定義。凡是含有純虛函數的類叫做抽象類。這種類不能聲明對象,只是作為基類為派生類服務。在派生類中必須完全實現基類的純虛函數,否則,派生類也變成了抽象類,不能實例化對象。
純虛函數多用在一些方法行為的設計上。在設計基類時,不太好確定或將來的行為多種多樣,而此行為又是必需的,我們就可以在基類的設計中,以純虛函數來聲明此種行為,而不具體實現它。
注意:C++的多態性是由虛函數來實現的,而不是純虛函數。在子類中如果有對基類虛函數的覆蓋定義,無論該覆蓋定義是否有virtual關鍵字,都是虛函數。