c++
哪些函式不能宣告為虛函式
什麼樣的函式不能宣告為虛函式?
1)不能被繼承的函式。
2)不能被重寫的函式。
1
)普通函式
普通函式不屬於成員函式,是不能被繼承的。普通函式只能被過載,不能被重寫,因此宣告為虛函式沒有意義。因為編譯器會在編譯時繫結函式。
而多型體現在執行時繫結。通常通過基類指標指向子類物件實現多型。
2
)友元函式
友元函式不屬於類的成員函式,不能被繼承。對於沒有繼承特性的函式沒有虛函式的說法。
3
)建構函式
首先說下什麼是建構函式,建構函式是用來初始化物件的。假如子類可以繼承基類建構函式,那麼子類物件的構造將使用基類的建構函式,而基類建構函式並不知道子類的有什麼成員,顯然是不符合語義的。從另外乙個角度來講,多型是通過基類指標指向子類物件來實現多型的,在物件構造之前並沒有物件產生,因此無法使用多型特性,這是矛盾的。因此建構函式不允許繼承。
4
)內聯成員函式
我們需要知道內聯函式就是為了在**中直接展開,減少函式呼叫花費的代價。也就是說內聯函式是在編譯時展開的。而虛函式是為了實現多型,是在執行時繫結的。因此顯然內聯函式和多型的特性相違背。
5
)靜態成員函式
首先靜態成員函式理論是可繼承的。但是靜態成員函式是編譯時確定的,無法動態繫結,不支援多型,因此不能被重寫,也就不能被宣告為虛函式。
C 複習之哪些函式不能宣告為虛函式
什麼樣的函式不能宣告為虛函式?1 不能被繼承的函式。2 不能被重寫的函式。1.普通函式 普通函式不屬於成員函式,是不能被繼承的。普通函式只能被過載,不能被重寫,因此宣告為虛函式沒有意義。因為編譯器會在編譯時繫結函式。2.友元函式 友元函式不屬於類的成員函式,不能被繼承。對於沒有繼承特性的函式沒有虛函...
哪些函式不能被宣告為虛函式
常見的不不能宣告為虛函式的有 普通函式 非成員函式 靜態成員函式 內聯成員函式 建構函式 友元函式。1 為什麼c 不支援普通函式為虛函式?普通函式 非成員函式 只能被overload,不能被override,宣告為虛函式也沒有什麼意思,因此編譯器會在編譯時邦定函式。2 為什麼c 不支援建構函式為虛函...
C 中不能宣告為虛函式的有哪些函式
常見的不不能宣告為虛函式的有 普通函式 非成員函式 靜態成員函式 內聯成員函式 建構函式 友元函式。1 為什麼c 不支援普通函式為虛函式?普通函式 非成員函式 只能被overload,不能被override,宣告為虛函式也沒有什麼意思,因此編譯器會在編譯時邦定函式。多型的執行期行為體現在虛函式上,虛...