純虛析構函式必須給出定義

2021-07-28 02:39:21 字數 1408 閱讀 8876

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 中,當乙個派生類物件通過使用乙個基類指標刪除,而這個基類有乙個非虛的析構函式,則結果是未定義的。執行時比較有代表性的後果是物件的派生部分不會被銷毀。然...