虛函數是為了實現多態,但是顯然并不是所有函數都可以聲明為虛函數的。
不能被聲明為虛函數的函數有兩類:
- 不能被繼承的函數
- 不能被重寫的函數
因此,這些函數都不能被聲明為虛函數
- 普通函數
- 構造函數
如果構造函數定義為虛函數,則需要通過查找虛函數表來進行調用。但是構造函數是虛函數的情況下是找不到的,因為構造函數自己本身也不存在,創建不了實例,沒有實例化對象,則類的成員不能被訪問。 - 靜態函數
- 友元函數
- 內聯成員函數
內聯函數是編譯時展開函數體,所以在此時就需要有實體,而虛函數是運行時才有實體,所以內聯函數不可以為虛函數