【C++学习笔记三】C++多态、抽象(接口)
當(dāng)類之間存在多種層次結(jié)構(gòu),并且類之間通過繼承關(guān)聯(lián)時就會用到多態(tài)。
虛函數(shù)在子類中的覆蓋版本和該函數(shù)在基類中的原始版本必須有相同的函數(shù)簽名、函數(shù)名、形參名、常屬性。如果返回值為非類類型,則必須相同,如果是類類型A的指針或者引用,允許子類的覆蓋版本返回A子類的的指針或者引用。
C++多態(tài)意味著調(diào)用成員函數(shù)時會根據(jù)函數(shù)的對象的類型來執(zhí)行不同的函數(shù)。
使用多態(tài)以后就可以通過基類的指針來指向不同的派生類來實現(xiàn)函數(shù)的多態(tài)。
使用方式為在基類需要實現(xiàn)多態(tài)的函數(shù)的修飾符中加入virtual。如果沒有virtual我們使用基類的指針只能訪問到基類的方法。
想要了解更多關(guān)于基類指針指向派生類的問題可以看我的另一篇文章:傳送門
使用virtual修飾的函數(shù)稱為虛函數(shù),不同于一般函數(shù)的靜態(tài)綁定,虛函數(shù)使用的時動態(tài)鏈接(后期綁定)
如果我們并不想在基類中實現(xiàn)虛函數(shù)(可能因為不會用到之類的原因),可以將虛函數(shù)聲明為純虛函數(shù)(接口),格式如下:
class A {public://virtual void func(){}virtual void func() = 0;//==0告訴編譯器,函數(shù)沒有主體,這是一個純虛函數(shù) };包含純虛函數(shù)的類叫做抽象類,**抽象類不能被實例化,但可以定義指針。**虛函數(shù)還是需要實現(xiàn)的,如果不想寫可以寫成{}
當(dāng)用基類指針指向派生類對象在動態(tài)分配堆上內(nèi)存的時候,析構(gòu)函數(shù)必須是虛函數(shù)!!!
友元函數(shù)不是成員函數(shù),因此不能虛擬。
父類的虛函數(shù)或純虛函數(shù)在子類中仍然是虛函數(shù),有時我們不希望父類的某個函數(shù)在子類中被重寫,在C++11后的版本可以使用final(放在函數(shù)聲明之后,函數(shù)體之前)來避免被重寫,如果不希望一個類被繼承也可以用final關(guān)鍵字(放在類聲明之后類體之前)
總結(jié)
以上是生活随笔為你收集整理的【C++学习笔记三】C++多态、抽象(接口)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 采桑子之妻室儿女剧情介绍
- 下一篇: C++重载和重写的条件以及重写后对基类函