C 什麼時候使用純虛函式

2021-06-01 02:49:48 字數 1201 閱讀 2078

通常在實現乙個介面的時候使用純虛函式。介面一般就是乙個抽象類。

有時在基類中將某一成員函式定為虛函式,並不是基類本身的要求,而是考慮到派生類的需要,在基類中預留乙個函式名,具體功能留給派生類根據需要去定義。例如,我們定義乙個point基類,point類中沒有求面積的area函式,因為點是沒有面積的。但是在其直接派生類cricle和間接派生類cylinder中都需要有area函式,而且這兩個area函式功能不同,乙個求圓面積,乙個求圓柱體表面積。在這種情況下應當將area函式宣告為虛函式。可以在基類point中加乙個area函式,並宣告為虛函式。

virtual float area( ) //虛函式

因為點是沒有面積的,所以返回值為0.其實在基類中並不使用這個函式,其返回值也是沒有意義的。為簡化,可以不寫出這種無意義的函式體,只給出函式的原型,也就是寫成純虛函式的形式。純虛函式宣告的結尾處為=0,使用如下:

class point

當類宣告中包含純虛函式時,則不能建立該類的物件。這裡,純虛函式的類只用作基類。原型中的=0使虛函式成為純虛函式。

使用純虛函式要注意:

1) 純虛函式沒有函式體

2)最後面的「=0」並不表示函式返回值為0,它只起形式上的作用,告訴編譯系統這是純虛函式

3)這是乙個宣告語句,最後以分號結束。

純虛函式其實就是宣告乙個虛函式,在派生類中在定義它。也就是說純虛函式只有函式的名字而不具備函式的功能,不能被呼叫。而在派生類中只有對此函式提供定義後,才能具備函式的功能,才能被呼叫。它僅僅是在基類中為其派生類保留乙個函式的名字,以方便派生類根據需要對它定義。如果基類中沒有保留函式名字,就無法實現多型。

一般情況下,純虛函式是用來定義抽象基類的時候來使用的。所謂的抽象基類就是一種不用來定義物件,而只作為一種基本型別用作繼承的抽象類,而常常用它來作為基類,所以叫抽象基類。凡是包含純虛函式的類都是抽象類。因為純虛函式時不能被呼叫的,包含純虛函式的類是無法建立物件的。抽象類的作用是作為乙個類族的共同基類,或者為乙個類族提供乙個公共介面。

在很多情況下,基類本身生成物件是不合情理的。例如,動物作為乙個基類可以派生出老虎、孔雀等子類,但動物本身生成物件明顯不合常理,動物只是乙個抽象概念,動物都有動作、大小等屬性,但只有具體到某一類動物的時候這些屬性才能具體化,所以動物只能實現為介面,即抽象類,把動作等屬性定義為純虛函式c++通過使用純虛函式提供未實現的函式。一般情況下,純虛函式是用來定義抽象基類的時候來使用的。這樣,純虛函式會在子類中被過載,這樣可以實現用相同的介面去做不同的事。

C 析構函式 什麼時候用虛函式

如果不需要基類對派生類及物件進行操作,則不能定義虛函式,因為這樣會增加記憶體開銷.當類裡面有定義虛函式的時候,編譯器會給類新增乙個虛函式表,裡面來存放虛函式指標,這樣就會增加類的儲存空間.所以,只有當乙個類被用來作為基類的時候,才把析構函式寫成虛函式.析構函式的作用是在物件撤銷之前把類的物件從記憶體...

什麼時候應當或不應當使用虛函式

虛函式是實現c 多型性的關鍵。多型即 乙個介面多種方法 通過虛函式的動態繫結技術,可以實現c 多型性。多型性可以簡單地概括為 乙個介面,多種方法 程式在執行時才決定呼叫的函式,它是物件導向程式設計領域的核心概念。多型 polymorphisn 字面意思多種形狀。c 多型性是通過虛函式來實現的,虛函式...

什麼時候使用引用 什麼時候使用指標

使用引用引數的主要原因有兩個 程式設計師能修改呼叫函式中的資料物件 通過傳遞引用而不是整個資料 物件,可以提高程式的執行速度一般的原則 對於使用引用的值而不做修改的函式 如果資料物件很小,如內建資料型別或者小型結構,則按照值傳遞 如果資料物件是陣列,則使用指標 唯一的選擇 並且指標宣告為指向cons...