虛函數(shù)的概念與作用 什么是虛函數(shù)?
什么是虛函數(shù)?虛擬函數(shù)定義:如果在基類中指定了一個(gè)函數(shù),而在派生類中有另一個(gè)函數(shù)定義,編譯器將知道我們不想靜態(tài)連接函數(shù)。我們真正需要的是根據(jù)調(diào)用函數(shù)的對(duì)象的類型來選擇在程序的特定位置調(diào)用哪個(gè)函數(shù)。功能
什么是虛函數(shù)?
虛擬函數(shù)定義:如果在基類中指定了一個(gè)函數(shù),而在派生類中有另一個(gè)函數(shù)定義,編譯器將知道我們不想靜態(tài)連接函數(shù)。我們真正需要的是根據(jù)調(diào)用函數(shù)的對(duì)象的類型來選擇在程序的特定位置調(diào)用哪個(gè)函數(shù)。
功能:用專業(yè)術(shù)語解釋虛擬功能的功能就是實(shí)現(xiàn)多態(tài)性,多態(tài)性就是將接口和實(shí)現(xiàn)分開;用可視化語言解釋虛擬功能的功能就是用常用的方法來實(shí)現(xiàn),但由于個(gè)體差異,采用不同的策略。
什么是虛函數(shù)和純虛函數(shù),有什么區(qū)別?
虛擬函數(shù)和純虛擬函數(shù)都可以在其子類中重寫。它們之間的區(qū)別在于:(1)純虛函數(shù)只有定義,沒有實(shí)現(xiàn),虛函數(shù)既有定義又有實(shí)現(xiàn)代碼。純虛函數(shù)一般沒有代碼實(shí)現(xiàn)部分,如virtual void print()=0,而一般虛函數(shù)必須有代碼實(shí)現(xiàn)部分,否則函數(shù)將是未定義的。Virtual void print(){printf(“this is Virtual functionn”)}(2)包含純虛函數(shù)的類不能定義其對(duì)象,而包含虛函數(shù)的類可以定義其對(duì)象。
虛函數(shù)有什么作用?
C中虛函數(shù)的函數(shù):1。為了方便地使用多態(tài)性,我們經(jīng)常需要在基類中定義虛函數(shù)。2在許多情況下,基類本身生成對(duì)象是沒有意義的。例如,作為基類,動(dòng)物可以派生老虎和孔雀等子類,但動(dòng)物自己生成對(duì)象顯然是不合理的。為了解決上述問題,引入了純虛函數(shù)的概念,將函數(shù)定義為純虛函數(shù)(方法:virtualreturntypefunction()=0)。編譯器要求必須在派生類中重寫函數(shù)才能實(shí)現(xiàn)多態(tài)性。具有純虛函數(shù)的類稱為抽象類,它不能生成對(duì)象。這是解決上述兩個(gè)問題的好辦法。在C中使用虛擬函數(shù):例如,你有一個(gè)游戲,其中有一個(gè)虛擬基類叫做“怪物”和一個(gè)純虛擬函數(shù)“攻擊”。然后導(dǎo)出了wolf、spider和Python三個(gè)子類。它們都實(shí)現(xiàn)了各自不同的“攻擊”功能。比如,狼咬人,蜘蛛吐絲,蟒蛇纏你。當(dāng)許多怪物出現(xiàn)時(shí),你可以定義一個(gè)虛擬基類指針數(shù)組,給它們各種怪物的指針,然后在迭代過程中用monster[i]->attack()直接攻擊玩家。請(qǐng)參見下圖:擴(kuò)展信息:使用虛擬函數(shù)的注意事項(xiàng):首先,包含虛擬函數(shù)的類指針列表將增加。2、 虛擬析構(gòu)函數(shù)析構(gòu)函數(shù)的功能是在對(duì)象被撤銷之前進(jìn)行必要的“清理場(chǎng)景”工作。當(dāng)派生類的對(duì)象從內(nèi)存中取出時(shí),首先調(diào)用派生類的析構(gòu)函數(shù),然后調(diào)用基類的析構(gòu)函數(shù)。當(dāng)我們新建一個(gè)臨時(shí)對(duì)象時(shí),如果基類包含一個(gè)析構(gòu)函數(shù)并定義了一個(gè)指向基類的指針變量。3、 構(gòu)造函數(shù)不能聲明為虛擬函數(shù)。構(gòu)造函數(shù)不能聲明為虛擬函數(shù)。如果聲明為虛擬函數(shù),編譯器將自動(dòng)報(bào)告。第四,我們不能在析構(gòu)函數(shù)或構(gòu)造函數(shù)中調(diào)用虛函數(shù)而不在析構(gòu)函數(shù)或構(gòu)造函數(shù)的過程中進(jìn)行析構(gòu)函數(shù)或構(gòu)造函數(shù)。即使我們?cè)跇?gòu)造函數(shù)或析構(gòu)函數(shù)中調(diào)用虛函數(shù),我們也不會(huì)向下調(diào)用派生類中的函數(shù)。
什么是c 虛函數(shù),虛函數(shù)的作用和使用方法?
在基類中聲明為虛擬的成員函數(shù),并在一個(gè)或多個(gè)派生類中重新定義。用法格式為:虛函數(shù)返回類型函數(shù)名(參數(shù)表){function body};實(shí)現(xiàn)多態(tài)性。通過指向派生類的基類指針或引用,可以訪問派生類中具有相同名稱的成員函數(shù)。虛函數(shù)定義:簡而言之,虛關(guān)鍵字修改的成員函數(shù)是虛函數(shù)。虛擬函數(shù)的功能是用專業(yè)術(shù)語實(shí)現(xiàn)多態(tài)性,多態(tài)性是把界面和實(shí)現(xiàn)分開;用視覺語言解釋是實(shí)現(xiàn)通用的方法,但由于個(gè)體差異而采取不同的策略。虛函數(shù)的函數(shù):使用相同的調(diào)用形式,可以調(diào)用派生類和基類名稱相同的函數(shù)。
虛函數(shù)或純虛函數(shù)主要用來解決什么問題?
虛擬函數(shù)用于后期動(dòng)態(tài)綁定,可以實(shí)現(xiàn)運(yùn)行時(shí)多態(tài)性。說白了,它是一個(gè)函數(shù)指針,決定了運(yùn)行時(shí)要調(diào)用的目標(biāo)。純虛函數(shù),顧名思義,是一個(gè)完全虛函數(shù)。它沒有綁定到任何實(shí)際函數(shù),是空的。純虛函數(shù)主要用于防止類的實(shí)例化。類的派生必須實(shí)現(xiàn)函數(shù),否則就不能實(shí)例化,這相當(dāng)于C#或Java的抽象函數(shù)。如果一個(gè)類中的所有函數(shù)都是純虛函數(shù),那么這個(gè)類就構(gòu)成了一個(gè)接口。