抽象类(纯虚函数、虚函数)和虚基类(虚继承)
C++多態(tài)
C++的多態(tài)包括靜態(tài)多態(tài)和動(dòng)態(tài)多態(tài),靜態(tài)多態(tài)包括函數(shù)重載和泛型編程,動(dòng)態(tài)多態(tài)包括虛函數(shù)。靜態(tài)多態(tài)實(shí)在編譯期間就能確定,動(dòng)態(tài)多態(tài)實(shí)直在程序運(yùn)行時(shí)才能確定。
抽象類
虛函數(shù)
在默認(rèn)情況下對函數(shù)成員調(diào)用實(shí)施的是靜態(tài)連編,也叫做靜態(tài)綁定。如果子類中的函數(shù)fff覆蓋了父類中的函數(shù)fff,那么基類中的其他函數(shù)調(diào)用函數(shù)fff的時(shí)候調(diào)用的仍然是基類中的函數(shù)而不是子類的。
為了解決這個(gè)問題可以在基類和子類的fff函數(shù)前加上virtual關(guān)鍵字,該函數(shù)就會(huì)變成虛函數(shù),當(dāng)在子類中調(diào)用基類的函數(shù)時(shí),如果該函數(shù)調(diào)用到函數(shù)fff調(diào)用的就是子類的函數(shù)。
對于虛函數(shù),編譯器完成的是動(dòng)態(tài)連編(動(dòng)態(tài)綁定)面對虛函數(shù)的調(diào)用是在程序運(yùn)行的時(shí)候確定的。
純虛函數(shù)
在實(shí)際編程中我們有些方法經(jīng)常沒有辦法實(shí)現(xiàn)(沒有對應(yīng)的成員或者不同的子類實(shí)現(xiàn)方法不同),我們就將函數(shù)聲明為純虛函數(shù),這樣就不需要實(shí)現(xiàn)。純虛函數(shù)的聲明形式為:
virtual 返回類型 方法名(參數(shù)列表)=0;抽象類指的是含有純虛函數(shù)或者基類的純虛函數(shù)還沒有將其實(shí)現(xiàn)的類。
很顯然,抽象類是不能被實(shí)例化的。只有子類中將所有的純虛函數(shù)都實(shí)現(xiàn)了以后(此時(shí)就不是抽象類了)才可以進(jìn)行實(shí)例化。
虛繼承和虛基類
在多重繼承時(shí)如果我們繼承的類繼承于同一個(gè)類(或者繼承的類之間有繼承關(guān)系等)就會(huì)出現(xiàn)多個(gè)相同的成員的情況,在訪問這些成員的時(shí)候我們必須加上基類的名字空間來進(jìn)行區(qū)別,否則就會(huì)出錯(cuò)。
但是一般情況下這種重復(fù)的變量是沒有什么意義的,為了解決這種重復(fù)沖突加浪費(fèi)的問題,我們可以使用虛繼承,即在繼承的時(shí)候在基類的名字前加上virtual,這樣當(dāng)其他類再繼承這個(gè)類的時(shí)候如果已經(jīng)繼承了更上層的基類只會(huì)保存一份成員。
虛繼承的目的時(shí)讓某個(gè)類作出聲明,承諾愿意共享它的基類。其中這個(gè)被共享的類稱為虛基類。
總結(jié)
以上是生活随笔為你收集整理的抽象类(纯虚函数、虚函数)和虚基类(虚继承)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 爱情需要奇迹剧情介绍
- 下一篇: 成员函数后面加上const的作用