C 哪些函式不能宣告成虛函式

2021-09-27 09:16:24 字數 730 閱讀 3054

在c++,有五種函式不能被宣告成虛函式,分別是:非成員函式、建構函式、靜態成員函式、內聯成員函式、友元函式這五種,下面分別解釋為什麼這五種函式不能被宣告成虛函式。

1. 非成員函式

非成員函式只能被過載(overload),不能被繼承(override),而虛函式主要的作用是在繼承中實現動態多型,非成員函式早在編譯期間就已經繫結函式了,無法實現動態多型,那宣告成虛函式還有什麼意義呢?

2. 建構函式

要想呼叫虛函式必須要通過「虛函式表」來進行的,但虛函式表是要在物件例項化之後才能夠進行呼叫。而在建構函式執行期間,還沒有為虛函式表分配空間,自然就沒法呼叫虛函式了。

3. 靜態成員函式

靜態成員函式對於每個類來說只有乙份,所有的物件都共享這乙份**,它是屬於類的而不是屬於物件。虛函式必須根據物件型別才能知道呼叫哪乙個虛函式,故虛函式是一定要在物件的基礎上才可以的,兩者乙個是與例項相關,乙個是與類相關。

4. 內聯成員函式

內聯函式是為了在**中直接展開,減少函式呼叫花費的代價,虛函式是為了在繼承後物件能夠準確的執行自己的動作,並且inline函式在編譯時被展開,虛函式在執行時才能動態地繫結函式。

5. 友元函式

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

linux應用程式、核心、驅動、後台開發交流討論群(745510310),感興趣的同學可以**討論、交流、資料查詢等,前進的道路上,你不是乙個人奧^_^。

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

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

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

什麼樣的函式不能宣告為虛函式?1 不能被繼承的函式。2 不能被重寫的函式。1.普通函式 普通函式不屬於成員函式,是不能被繼承的。普通函式只能被過載,不能被重寫,因此宣告為虛函式沒有意義。因為編譯器會在編譯時繫結函式。2.友元函式 友元函式不屬於類的成員函式,不能被繼承。對於沒有繼承特性的函式沒有虛函...

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

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