- 不能被繼承和不能被重載的函數;
1)普通函數
普通函數不屬於成員函數,是不能被繼承的。普通函數只能被重載,不能被重寫,因此聲明為虛函數沒有意義。因為編譯器會在編譯時綁定函數。
而多態體現在運行時綁定。通常通過基類指針指向子類對象實現多態。
2)友元函數
友元函數不屬於類的成員函數,不能被繼承。對於沒有繼承特性的函數沒有虛函數的說法。
3)構造函數
首先說下什么是構造函數,構造函數是用來初始化對象的。假如子類可以繼承基類構造函數,那么子類對象的構造將使用基類的構造函數,而基類構造函數並不知道子類的有什么成員,顯然是不符合語義的。從另外一個角度來講,多態是通過基類指針指向子類對象來實現多態的,在對象構造之前並沒有對象產生,因此無法使用多態特性,這是矛盾的。因此構造函數不允許繼承。
4)內聯成員函數
我們需要知道內聯函數就是為了在代碼中直接展開,減少函數調用花費的代價。也就是說內聯函數是在編譯時展開的。而虛函數是為了實現多態,是在運行時綁定的。因此顯然內聯函數和多態的特性相違背。
5)靜態成員函數
首先靜態成員函數理論是可繼承的。但是靜態成員函數是編譯時確定的,無法動態綁定,不支持多態,因此不能被重寫,也就不能被聲明為虛函數。