effective c++ 條歀07:為多型基類宣告virtual析構函式(declare destructors virtual in polymorphic base classes)
純虛函式是一種特殊的虛函式,在許多情況下,在基類中不能對虛函式給出有意義的實現,而把它宣告為純虛函式,它的實現留給該基類的派生類去做。這就是純虛函式的作用。
虛函式是c++語言的精髓。含有純虛函式的類被稱為抽象類,不能被例項化生成物件,只能派生。由它派生的類的純虛函式如果沒有被實現,那麼,該派生類還是個抽象類。 只有全部實現了純虛函式的派生類才可以被例項化。
定義乙個函式為純虛函式,一般表示該函式沒有被實現。但是,這不代表純虛函式不能被實現。純虛函式也是可以定義的。
虛析構函式是為了讓通過基類指標或引用可以正確釋放派生類物件。有時候如果想讓基類成為乙個抽象類,也就是不能被例項化,可以為類引入乙個純虛函式。但如果手上沒有任何pure virtual函式時,該怎麼辦?由於抽象類總是會被作為基類用於派生的,而基類就該有乙個虛的析構函式,並且由純虛函式可以導致抽象類。所以常常把基類的析構函式宣告為純虛析構函式。又
由於所有物件析構時,最後都會呼叫其基類的析構函式,所以基類的析構函式必須有定義。純虛析構函式也不例外。
所以,必須為基類的純虛析構函式提供乙個定義,否則,鏈結器會發出抱怨的。
[cpp]
view plain
copy
#ifndef class_head_file
#define class_head_file
class
base ;
class
derived :
public
base ;
#endif // class_head_file
[cpp]
view plain
copy
#include "class.h"
#include
base::base()
base::~base()
derived::derived()
derived::~derived()
[cpp]
view plain
copy
#include "class.h"
intmain()
輸出結果為:
[html]
view plain
copy
base() is called!
derived() is called!
~derived() is called!
~base() is called!
C 虛函式,純虛函式,虛析構和純虛析構
c 虛函式 定義為虛函式是為了允許用基類的指標來呼叫子類的這個函式,是需要具體實現的 virtual void funtion1 c 純虛函式 一 定義 純虛函式是在基類中宣告的虛函式,它在基類中沒有定義,但要求任何派生類都要定義自己的實現方法。在基類中實現純虛函式的方法是在函式原型後加 0 vir...
C 虛析構函式 純虛析構函式
虛析構函式 析構函式的工作方式是 最底層的派生類 most derived class 的析構函式最先被呼叫,然後呼叫每乙個基類的析構函式。因為在c 中,當乙個派生類物件通過使用乙個基類指標刪除,而這個基類有乙個非虛的析構函式,則結果是未定義的。執行時比較有代表性的後果是物件的派生部分不會被銷毀。然...
C 虛析構函式 純虛析構函式
虛析構函式 析構函式的工作方式是 最底層的派生類 most derived class 的析構函式最先被呼叫,然後呼叫每乙個基類的析構函式。因為在c 中,當乙個派生類物件通過使用乙個基類指標刪除,而這個基類有乙個非虛的析構函式,則結果是未定義的。執行時比較有代表性的後果是物件的派生部分不會被銷毀。然...