C 複習之哪些函式不能宣告為虛函式

2021-08-22 00:26:14 字數 671 閱讀 9946

什麼樣的函式不能宣告為虛函式?1)不能被繼承的函式。2)不能被重寫的函式。

1. 普通函式

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

2.友元函式

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

3.建構函式

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

4.內聯成員函式

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

5.靜態成員函式

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

哪些函式不能被宣告為虛函式

常見的不不能宣告為虛函式的有 普通函式 非成員函式 靜態成員函式 內聯成員函式 建構函式 友元函式。1 為什麼c 不支援普通函式為虛函式?普通函式 非成員函式 只能被overload,不能被override,宣告為虛函式也沒有什麼意思,因此編譯器會在編譯時邦定函式。2 為什麼c 不支援建構函式為虛函...

C 面試題之哪些函式不能宣告為虛函式

c 哪些函式不能宣告為虛函式 什麼樣的函式不能宣告為虛函式?1 不能被繼承的函式。2 不能被重寫的函式。1 普通函式 普通函式不屬於成員函式,是不能被繼承的。普通函式只能被過載,不能被重寫,因此宣告為虛函式沒有意義。因為編譯器會在編譯時繫結函式。而多型體現在執行時繫結。通常通過基類指標指向子類物件實...

C 中不能宣告為虛函式的有哪些函式

常見的不不能宣告為虛函式的有 普通函式 非成員函式 靜態成員函式 內聯成員函式 建構函式 友元函式。1 為什麼c 不支援普通函式為虛函式?普通函式 非成員函式 只能被overload,不能被override,宣告為虛函式也沒有什麼意思,因此編譯器會在編譯時邦定函式。多型的執行期行為體現在虛函式上,虛...