0
A
回答
3
別擔心。虛擬表是實現細節,甚至不保證存在。你擔心如何做的越多,你就會越少地瞭解實際的語言。
這就是說,是的。然後具體的類會將該指針設置爲指向正確的虛擬表。
0
在技術上並不存在「純虛擬物體」這樣的東西。我假設你的意思是一個純虛擬方法的對象?但是你實際上不能創建這樣的對象,因爲它會是抽象的,編譯器會抱怨。
儘管如此,在構造對象時,它只是在成爲派生類的實例之前的一個抽象類的實例。在這種情況下,將有一個虛擬表設置它定義的功能。純虛擬方法可能會有NULL。如果您嘗試調用該程序將會崩潰。
你可以通過在構造函數中調用虛擬方法來試試。如果您調用基類中的方法,您會發現它們會調用基類版本。如果您調用純虛擬方法,它會崩潰。 (在某些情況下,編譯器會找出你在做什麼,而不是抱怨)。
的帶回家的是:
不要調用虛函數在構造函數,它只是有可能會造成混亂。事實上,在大多數情況下,如果你的構造函數只是設置其內部狀態並且沒有做太複雜的事情,那麼最好。
+0
「_對於純虛擬方法可能會有NULL。」通常情況下不會:只有在這種情況下才會在控制檯上打印「純虛擬調用」的函數,然後中止。但人們必須記住,行爲沒有定義,所以在這裏沒有保證。 – curiousguy 2012-08-09 01:30:55
相關問題
- 1. 指向虛擬成員函數的指針是否可比?
- 2. 純虛擬方法VS.函數指針
- 3. 虛擬類的每個對象都有一個指向vtable的指針嗎?
- 4. 設置指向對象的指針,讓對象指向對方
- 5. 是否有可能有一個指針指向第一個指針所指向的變量的指針?
- 6. 是否有可能訪問多態類中的虛擬指針
- 7. ,對象和指向對象的指針有什麼區別?
- 8. 獲取雙指針指向的對象
- 9. boost :: gil指向bgr8_view_t對象的指針
- 10. 指向對象開始的指針(C++)
- 11. 指向對象類型的指針
- 12. 解引用指向對象的指針
- 13. 指針幫助,指向對象的指針和類
- 14. 傳遞對象指針作爲指向基類的指針
- 15. 是否有可能得到一個指針指向一個純虛函數的定義?
- 16. 獲取對象指針指向
- 17. 指向指針數組的指針是?
- 18. 什麼是指向指針的指針?
- 19. 多態 - 適當使用指向純抽象類的指針?
- 20. 向量含有矢量對象指針的最終指向同一對象
- 21. 如何獲取虛擬方法的地址,如果我有指向基類對象的指針?
- 22. 可以將指向子對象的指針視爲指向父對象的指針嗎?
- 23. 創建一個指向抽象對象的指針向量
- 24. C指針是指物理地址還是虛擬地址
- 25. QxOrm是否可以堅持指向抽象類的指針?
- 26. 創建指向沒有新關鍵字的對象的指針
- 27. 指向指針的指針和指向數組的指針
- 28. 這是將指針指向對象的正確方法嗎?
- 29. C++指向新類的類指針與指向類對象的指針之間有什麼區別?
- 30. 給對象一個指向「世界」的指針是否可以接受?
「純虛擬物體」是一個矛盾。一旦你創建了一個對象,它就不再是純粹的,它是一個真正的類的對象。而且它是虛擬的,你創造了一個真實的物體。像這樣的Monikers適用於一種方法,而不是一類。 – 2010-10-02 21:03:02
@Hans - 有些人會堅持認爲fred *指向fred類型的對象,儘管fred類是純虛擬的。我個人認爲,這個對象與實例化的對象是相同的,不管你如何引用它,而且純虛擬類當然不能被實例化 - 但是我曾經被稱爲傻瓜,因爲它對comp.lang這麼說.C++由一個我相信是在標準化委員會的人。當然,我當時自己很討厭,所以... – Steve314 2010-10-02 21:12:58
Hmya,強調單詞「oxymoron」不應該放在最後一個音節上。談論「純粹的虛擬物體」就像十幾歲的男孩談論性。很多想象力,而不是很多練習。使用「界面」一詞,你會得到一個地方。 – 2010-10-02 21:30:18