天天看點

C++中的虛函數和析構函數的定義和作用

虛函數

定義:

C++中的虛函數的作用是允許在派生類中重新定義與基類同名的函數,并且可以通過基類指針或引用來通路基類和派生類中的同名函數。

虛函數的使用方法是:

  1. 在基類用virtual聲明成員函數為虛函數。這樣就可以在派生類中重新定義此函數,為它賦予新的功能,并能友善地被調用。在類外定義虛函數時,不必再加virtual。在派生類中重新定義此函數,要求函數名、函數類型、函數參數個數和類型全部與基類的虛函數相同,并根據派生類的需要重新定義函數體。
  2. C++規定,當一個成員函數被聲明為虛函數後,其派生類中的同名函數都自動成為虛函數。是以在派生類重新聲明該虛函數時,可以加virtual,也可以不加,但習慣上一般在每一層聲明該函數時都加virtual,使程式更加清晰。如果在派生類中沒有對基類的虛函數重新定義,則派生類簡單地繼承其直接基類的虛函數。
  3. 定義一個指向基類對象的指針變量,并使它指向同一類族中需要調用該函數的對象。
  4. 通過該指針變量調用此虛函數,此時調用的就是指針變量指向的對象的同名函數。

    通過虛函數與指向基類對象的指針變量的配合使用,就能友善地調用同一類族中不同類的同名函數,隻要先用基類指針指向即可。如果指針不斷地指向同一類族中不同類的對象,就能不斷地調用這些對象中的同名函數。這就如同前面說的,不斷地告訴計程車司機要去的目的地,然後司機把你送到你要去的地方。

需要說明:有時在基類中定義的非虛函數會在派生類中被重新定義,如果用基類指針調用該成員函數,則系統會調用對象中基類部分的成員函數;如果用派生類指針調用該成員函數,則系統會調用派生類對象中的成員函數,這并不是多态性行為(使用的是不同類型的指針),沒有用到虛函數的功能。

析構函數

“析構函數”是構造函數的反向函數。 在銷毀(釋放)對象(或者非static成員)、釋放空間時将調用它們。 通過在類名前面放置一個波形符 (~) 将函數指定為類的析構函數。析構函數通常用于在不再需要某個對象時“清理”此對象。

1.函數名是在類名前加上~,無參數且無傳回值。

2.一個類隻能有且有一個析構函數,如果沒有顯式的定義,系統會生成一個預設的析構函數(合成析構函數)。

3.析構函數不能重載。每有一次構造函數的調用就會有一次析構函數的調用。

繼續閱讀