亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

為什么我們在C ++中沒有虛擬構造函數?

為什么我們在C ++中沒有虛擬構造函數?

C++
LEATH 2019-10-23 14:27:35
為什么C ++沒有虛擬構造函數?
查看完整描述

3 回答

?
qq_笑_17

TA貢獻1818條經驗 獲得超7個贊

從馬的嘴里聽到。:)


來自Bjarne Stroustrup的C ++樣式和技術常見問題解答為什么我們沒有虛擬構造函數?


虛擬調用是一種在給出部分信息的情況下完成工作的機制。特別是,“虛擬”使我們可以調用僅知道任何接口而不知道對象確切類型的函數。要創建對象,您需要完整的信息。特別是,您需要知道要創建的確切類型。因此,“對構造函數的調用”不能是虛擬的。


FAQ條目繼續為代碼提供了一種無需虛擬構造函數即可實現此目的的方法。


查看完整回答
反對 回復 2019-10-23
?
慕慕森

TA貢獻1856條經驗 獲得超17個贊

虛函數基本上提供多態行為。即,當您使用動態類型不同于所引用的靜態(編譯時)類型的對象時,它提供的行為適合于對象的實際類型,而不是對象的靜態類型。


現在嘗試將這種行為應用于構造函數。構造對象時,靜態類型始終與實際對象類型相同,因為:


要構造一個對象,構造函數需要創建對象的確切類型。此外,您不能有指向構造函數的指針。


(Bjarne Stroustup(P424 C ++編程語言SE))


查看完整回答
反對 回復 2019-10-23
?
白板的微信

TA貢獻1883條經驗 獲得超3個贊

與諸如Smalltalk或Python之類的面向對象的語言不同,構造函數是表示類的對象的虛擬方法(這意味著您不需要GoF 抽象工廠模式,因為您可以傳遞表示類的對象,而無需制作C ++是一種基于類的語言,并且沒有表示該語言任何構造的對象。該類在運行時不作為對象存在,因此您不能在其上調用虛擬方法。


盡管我見過的每個大型C ++項目最終都實現了某種形式的抽象工廠或反射,但這符合“不用為不使用而付出的錢”的理念。


查看完整回答
反對 回復 2019-10-23
  • 3 回答
  • 0 關注
  • 632 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號