C++的“虛”應用

老司機的詩和遠方發表於2020-04-06

純虛擬函式

關於什麼是C++的純虛擬函式,這裡不在累贅闡述,可以參見百度。一句話說其結構就是virtual fun()=0,純虛擬函式的作用主要是實現更抽象化的介面。可以說是一種提高程式設計效率的機制,他的目的是告訴使用者這樣的類擁有的介面行為,但是其不會具體實現,由繼承他的子類派生類實現。相當於這樣的介面在具體的子類中表現的行為是不一樣的。注意有純虛擬函式的類成為抽象類,不可以例項化!!

虛擬函式

基類指標呼叫子類同名方法的應用,只要在方法前面加上virtual!
虛擬函式主要是應用在多型繼承,直接在函式介面前面加上virtual,父類中加有virtual的函式,其派生類的同名函式將會繼承的基礎上並代替這樣的函式介面,因此當其子類例項化時呼叫的介面將會是子類裡的同名函式方法,這很明顯,但是一般當不這麼用,引入虛擬函式的主要作用是實現多型,使用遲聯編技術,當其基類指標指向子類物件時候,此時基類呼叫的虛方法就是子類裡面的方法,注意注意!要跟覆蓋有區別,可以說覆蓋是子類和基類是沒有什麼任何關係的,不需要在基類的同名方法前面加virtual,派生類是在繼承的基礎上直接覆蓋同名方法,基類指標即使指向子類也無法呼叫子類的方法,只能是基類裡面的介面。

虛繼承

虛繼承主要解決是多繼承導致的多份重複,特別是菱形繼承,勢必導致基類重複備份。最好的解決方法就是在繼承的時候加上virtual,一種虛繼承機制。
公式 class b: virtual public a
這裡寫圖片描述

相關文章