C 虛函式的作用以及哪些函式不可以成為虛函式

2021-10-02 23:56:20 字數 806 閱讀 2711

基類指標可以指向派生類的物件(多型性),如果刪除該指標delete p;就會呼叫該指標指向的派生類析構函式,而派生類的析構函式又自動呼叫基類的析構函式,這樣整個派生類的物件完全被釋放。

如果析構函式不被宣告成虛函式,則編譯器實施靜態繫結,在刪除基類指標時,只會呼叫基類的析構函式而不呼叫派生類析構函式,這樣就會造成派生類物件析構不完全。

不能被繼承的函式和不能被重寫的函式。

1)普通函式

普通函式不屬於成員函式,是不能被繼承的。普通函式只能被過載,不能被重寫,因此宣告為虛函式沒有意義。因為編譯器會在編譯時繫結函式。

而多型體現在執行時繫結。通常通過基類指標指向子類物件實現多型。

2)友元函式

友元函式不屬於類的成員函式,不能被繼承。對於沒有繼承特性的函式沒有虛函式的說法。

3)建構函式

首先說下什麼是建構函式,建構函式是用來初始化物件的。假如子類可以繼承基類建構函式,那麼子類物件的構造將使用基類的建構函式,而基類建構函式並不知道子類的有什麼成員,顯然是不符合語義的。從另外乙個角度來講,多型是通過基類指標指向子類物件來實現多型的,在物件構造之前並沒有物件產生,因此無法使用多型特性,這是矛盾的。因此建構函式不允許繼承。

4)內聯成員函式

我們需要知道內聯函式就是為了在**中直接展開,減少函式呼叫花費的代價。也就是說內聯函式是在編譯時展開的。而虛函式是為了實現多型,是在執行時繫結的。因此顯然內聯函式和多型的特性相違背。

5)靜態成員函式

首先靜態成員函式理論是可繼承的。但是靜態成員函式是編譯時確定的,無法動態繫結,不支援多型,因此不能被重寫,也就不能被宣告為虛函式。、

虛函式的應用以及實現機制

虛函式是 c 語言中的乙個相當重要的概念,特別對於 c程式設計師來說,本身並沒有精力去系統的學習 c 中的一些概念,比如虛基類 虛函式等,c 語言不似 c語言這般簡潔,紛繁複雜,像是大雜燴,這也是我早期相當討厭 c 語言的原因,但是它也有其獨到之處,作為現代的 c程式設計師,難免會接觸 c 而也是因...

函式作用以及定時器

1 函式 函式的作用 函式的基本作用是對乙個功能進行封裝 方便多處呼叫,實現 的復用 if var num1 document.getelemnetbytagname value value作用 取值 document.getelementbytagname value res value作用 賦值...

C 虛函式及其作用

虛函式的作用 虛函式的作用主要是為了能夠實現多型而設計的。可以讓成員函式操作一般化,用基類的指標指向不同的派生類的物件時,基類指標呼叫其虛成員函式,則會呼叫其真正指向物件的成員函式,而不是基類中定義的成員函式 只要派生類改寫了該成員函式 若不是虛函式,則不管基類指標指向的哪個派生類物件,呼叫時都 會...