如果在基類函數是虛構的時候,派生類中聲明瞭一個非虛函數,爲什麼它會在調用其指針上的函數時調用vtable查找?該範圍內的功能很明確。在派生類中聲明的非虛擬虛函數
13
A
回答
21
在C++中,如果您在基類中聲明方法virtual
,那麼即使省略了關鍵字virtual
,它在派生類中也是虛擬的。
但是,對於文檔的目的,我認爲很高興重複它。
0
當一個類繼承一個虛擬函數時,即使沒有使用關鍵字virtual
,該函數的任何新的重寫聲明也會自動變爲虛擬。
2
函數仍然是虛擬的(假設它具有相同或協變的簽名)。當覆蓋是冗餘時使用virtual
。
5
你不能做一個非虛擬的功能,所以它將保持虛擬,並且對函數的調用通常也是虛擬的。當然,在某些情況下,編譯器可以優化並直接調用,但顯然不適用於您的情況。
1
爲派生類創建虛擬方法(當您將方法標記爲虛擬時,它將在派生類上使用vtable)。被覆蓋的方法將是虛擬的。
相關問題
- 1. 在C++中聲明基類和派生類的'虛擬'構造函數?
- 2. C++虛函數,在派生類中聲明晉升爲公衆
- 3. 帶虛擬基礎和虛函數派生類的sizeof
- 4. 純虛函數派生類
- 5. 派生類與非虛擬析構函數
- 6. 私人虛函數在派生類中
- 7. 派生類中的虛函數命名
- 8. C++虛擬函數的前向聲明
- 9. 重載函數(虛擬/非虛擬)
- 10. 派生類中的虛擬限定符
- 11. 設置虛擬函數聲明爲零?
- 12. 使用方法聲明純虛在派生類中
- 13. 具有虛擬功能的類中的非虛函數
- 14. 未執行派生類虛函數
- 15. 如何讓基類對象調用派生類非虛函數?
- 16. 爲什麼派生類不能訪問非虛擬基類函數?
- 17. 從基類指針調用派生類非虛擬成員函數
- 18. 虛擬函數不能解決大多數派生類方法
- 19. 繼承虛擬派生類的構造函數。
- 20. C++:重寫從模板類派生的虛擬純函數
- 21. 混淆派生類虛擬函數被調用的方式
- 22. C++:派生類和虛擬方法
- 23. 虛擬關鍵字在函數聲明中的位置
- 24. 虛擬函數是否覆蓋基類中同名的非虛函數?
- 25. 繼承虛擬類和非虛類
- 26. 從基類構造函數調用派生類的虛函數?
- 27. 虛擬函數在基類中是常量而在派生中不是常量
- 28. 非導出的虛函數導致LNK2001在其他項目的派生類中
- 29. 具有虛擬和非虛擬功能的unique_ptr :: get()函數
- 30. 通過派生類虛擬方法調用基類虛擬方法
這對編譯器來說可能是多餘的,但對於任何使用該類的人來說都是很好的文檔。 –
@LokiAstari:對。 – PlasmaHH