C++ 哪些函数不能声明成虚函数
在C++,有五種函數(shù)不能被聲明成虛函數(shù),分別是:非成員函數(shù)、構(gòu)造函數(shù)、靜態(tài)成員函數(shù)、內(nèi)聯(lián)成員函數(shù)、友元函數(shù)這五種,下面分別解釋為什么這五種函數(shù)不能被聲明成虛函數(shù)。
1. 非成員函數(shù)
非成員函數(shù)只能被重載(overload),不能被繼承(override),而虛函數(shù)主要的作用是在繼承中實(shí)現(xiàn)動態(tài)多態(tài),非成員函數(shù)早在編譯期間就已經(jīng)綁定函數(shù)了,無法實(shí)現(xiàn)動態(tài)多態(tài),那聲明成虛函數(shù)還有什么意義呢?
2. 構(gòu)造函數(shù)
要想調(diào)用虛函數(shù)必須要通過“虛函數(shù)表”來進(jìn)行的,但虛函數(shù)表是要在對象實(shí)例化之后才能夠進(jìn)行調(diào)用。而在構(gòu)造函數(shù)運(yùn)行期間,還沒有為虛函數(shù)表分配空間,自然就沒法調(diào)用虛函數(shù)了。
3. 靜態(tài)成員函數(shù)
靜態(tài)成員函數(shù)對于每個(gè)類來說只有一份,所有的對象都共享這一份代碼,它是屬于類的而不是屬于對象。虛函數(shù)必須根據(jù)對象類型才能知道調(diào)用哪一個(gè)虛函數(shù),故虛函數(shù)是一定要在對象的基礎(chǔ)上才可以的,兩者一個(gè)是與實(shí)例相關(guān),一個(gè)是與類相關(guān)。
4. 內(nèi)聯(lián)成員函數(shù)
內(nèi)聯(lián)函數(shù)是為了在代碼中直接展開,減少函數(shù)調(diào)用花費(fèi)的代價(jià),虛函數(shù)是為了在繼承后對象能夠準(zhǔn)確的執(zhí)行自己的動作,并且inline函數(shù)在編譯時(shí)被展開,虛函數(shù)在運(yùn)行時(shí)才能動態(tài)地綁定函數(shù)。
5. 友元函數(shù)
因?yàn)镃++不支持友元函數(shù)的繼承,對于沒有繼承特性的函數(shù)沒有虛函數(shù)的說法。友元函數(shù)不屬于類的成員函數(shù),不能被繼承。
=============================================================================================
Linux應(yīng)用程序、內(nèi)核、驅(qū)動、后臺開發(fā)交流討論群(745510310),感興趣的同學(xué)可以加群討論、交流、資料查找等,前進(jìn)的道路上,你不是一個(gè)人奧^_^。
總結(jié)
以上是生活随笔為你收集整理的C++ 哪些函数不能声明成虚函数的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 面试浅谈 c++ 的空间两级配置器
- 下一篇: 《剑指offer》c++版本 14.剪绳