C 什麼樣的函式不能宣告為虛函式?

2022-09-04 20:39:15 字數 647 閱讀 7370

不能被繼承的函式。

不能被重寫的函式。

1)普通函式

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

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

2)友元函式

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

3)建構函式

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

4)內聯成員函式

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

5)靜態成員函式

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

建構函式不能宣告為虛函式

建構函式不能宣告為虛函式的原因 1.所謂虛函式就是多型情況下只執行乙個,而從繼承的概念來講,總是先構造父類物件,然後才能使子類物件,如果建構函式設為虛函式,那麼你在構造父類的建構函式時就不得不顯式的呼叫構造,還有乙個原因就是為了防錯誤的發生,試想如果你在子類中一不小心重寫了個跟父類建構函式一樣的函式...

C 中建構函式不能宣告為虛函式

建構函式不能宣告為虛函式,析構函式可以宣告為虛函式,而且有時是必須宣告為虛函式。不建議在建構函式和析構函式裡面呼叫虛函式。建構函式不能宣告為虛函式的原因是 1 構造乙個物件的時候,必須知道物件的實際型別,而虛函式行為是在執行期間確定實際型別的。而在構造乙個物件時,由於物件還未構造成功。編譯器無法知道...

C 這些函式不能宣告為虛函式的原因

1.不能宣告為虛函式的函式 普通函式 非成員函式 我在前面多型這篇部落格裡講到,定義虛函式的主要目的是為了重寫達到多型,所以普通函式宣告為虛函式沒有意義,因此編譯器在編譯時就繫結了它。靜態成員函式 靜態成員函式對於每個類都只有乙份 所有物件都可以共享這份 他不歸某乙個物件所有,所以它也沒有動態繫結的...