2 回答

TA貢獻(xiàn)1856條經(jīng)驗 獲得超17個贊
常見的不能聲明為虛函數(shù)的有:普通函數(shù)(非成員函數(shù))、靜態(tài)成員函數(shù)、內(nèi)聯(lián)成員函數(shù)、構(gòu)造函數(shù)、友元函數(shù)。1、為什么C++不支持普通函數(shù)為虛函數(shù)? 普通函數(shù)(非成員函數(shù))只能overload,不能被override,聲明為虛函數(shù)也沒有什么意思,因此編譯器會在編譯時綁定函數(shù)。2、為什么C++不支持構(gòu)造函數(shù)為虛函數(shù)?這個原因很簡單,主要是從語義上考慮,所以不支持。因為構(gòu)造函數(shù)本來是為了明確初始化對象成員才產(chǎn)生的,然而virtual function主要是為了在不完全了解細(xì)節(jié)的情況下也能正確處理對象。另外,虛函數(shù)是在不同類型的對象產(chǎn)生不同的動作,現(xiàn)在對象還沒有產(chǎn)生,如何使用虛函數(shù)來完成你想完成的動作。3、為什么C++不支持靜態(tài)成員函數(shù)為虛函數(shù)? 靜態(tài)成員函數(shù)對于每個類來說只有一份代碼,所有的對象都共享這一份代碼,他不歸某個對象所有,所以他也沒有動態(tài)綁定的必要性。4、為什么C++不支持內(nèi)聯(lián)成員函數(shù)為虛函數(shù)? 其實很簡單,內(nèi)聯(lián)函數(shù)就是為了在代碼中直接展開,減少函數(shù)調(diào)用話費(fèi)的代價,虛函數(shù)是為了在繼承后對象能夠準(zhǔn)確的執(zhí)行自己的動作,這是不可能統(tǒng)一的。再說,inline函數(shù)在編譯時被展開,虛函數(shù)在運(yùn)行時才能動態(tài)的綁定函數(shù)。5、為什么C++不支持友元函數(shù)為虛函數(shù)?
- 2 回答
- 0 關(guān)注
- 1049 瀏覽
添加回答
舉報