[C/C++]Virtual基類

和Inline有相同點,Inline就是編譯的時候將函數直接展開來,不使用鏈接方式。Virtual也是影響編譯和鏈接的一種修飾符。

  • Virtual基類:(虛擬繼承)用Virtual修飾類,派生類到基類存在多條路線時(多個繼承脈絡或者途徑),一個這種派生類的對象實例化將包含多個基類對象。用Virtual來避免產生多個基類的對象在多繼承下,虛繼承就是爲了解決菱形繼承中,B,C都繼承了A,D繼承了B,C,那麼D關於 A的引用只有一次,而不是 普通繼承的 對於A引用了兩次(這裏需要將A定義成虛類);
  • Virtual函數(虛函數):虛函數,是由於基類的指針可以執行派生類,用virtual定義的函數可以在派生類中重定義,後續引用也是引用派生類,即根據實際的子類對象動態綁定實際調用的方法。相當於允許子類重寫覆蓋基類函數;
  • Virtual純虛函數:也是類似作用,不寫明具體實現,由子類進行實現。不在編譯階段靜態綁定,而是運行的時候進行動態綁定。
    綜上:vitual關鍵字的引入,可以理解爲阻止編譯階段的靜態綁定,將綁定(虛函數)和約束工作(虛基類)轉移到運行時動態處理。(在運行的時候,通過虛函數列表,去尋找每個對象對應的對於虛函數的實現,然後進行使用,其實類似C語言中的查表)
    virtual是不能夠實例化的,所以一般多用於接口類。這個就是C語言的多態性;
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章