新聞中心
純虛函數(shù)的定義
純虛函數(shù)是一種特殊的虛函數(shù),它的一般格式如下:
創(chuàng)新互聯(lián)企業(yè)建站,10余年網(wǎng)站建設(shè)經(jīng)驗(yàn),專(zhuān)注于網(wǎng)站建設(shè)技術(shù),精于網(wǎng)頁(yè)設(shè)計(jì),有多年建站和網(wǎng)站代運(yùn)營(yíng)經(jīng)驗(yàn),設(shè)計(jì)師為客戶打造網(wǎng)絡(luò)企業(yè)風(fēng)格,提供周到的建站售前咨詢(xún)和貼心的售后服務(wù)。對(duì)于成都網(wǎng)站設(shè)計(jì)、網(wǎng)站建設(shè)中不同領(lǐng)域進(jìn)行深入了解和探索,創(chuàng)新互聯(lián)在網(wǎng)站建設(shè)中充分了解客戶行業(yè)的需求,以靈動(dòng)的思維在網(wǎng)頁(yè)中充分展現(xiàn),通過(guò)對(duì)客戶行業(yè)精準(zhǔn)市場(chǎng)調(diào)研,為客戶提供的解決方案。
class 類(lèi)名
{
virtual 類(lèi)型函數(shù)名(參數(shù)表)=0;
…
};
在許多情況下,在基類(lèi)中不能對(duì)虛函數(shù)給出有意義的實(shí)現(xiàn),而把它聲明為純虛函數(shù),它的實(shí)現(xiàn)留給該基類(lèi)的派生類(lèi)去做。這就是純虛函數(shù)的作用。
純虛函數(shù)可以讓類(lèi)先具有一個(gè)操作名稱(chēng),而沒(méi)有操作內(nèi)容,讓派生類(lèi)在繼承時(shí)再去具體地給出定義。凡是含有純虛函數(shù)的類(lèi)叫做抽象類(lèi)。這種類(lèi)不能聲明對(duì)象,只是作為基類(lèi)為派生類(lèi)服務(wù)。除非在派生類(lèi)中完全實(shí)現(xiàn)基類(lèi)中所有的的純虛函數(shù),否則,派生類(lèi)也變成了抽象類(lèi),不能實(shí)例化對(duì)象。
一般而言純虛函數(shù)的函數(shù)體是缺省的,但是也可以給出純虛函數(shù)的函數(shù)體(此時(shí)純虛函數(shù)變?yōu)樘摵瘮?shù)),這一點(diǎn)經(jīng)常被人們忽視,調(diào)用純虛函數(shù)的方法為baseclass::virtual function.
c++里定義純虛函數(shù)
你概念有點(diǎn)混淆了,這個(gè)virtual void fun()=0; 是純虛函數(shù);virtual void fun(); 是虛函數(shù)。它們是有區(qū)別的。有純虛函數(shù)的類(lèi)一般都是虛基類(lèi),主要用于繼承,讓子類(lèi)來(lái)實(shí)現(xiàn)虛函數(shù)。虛函數(shù)的作用當(dāng)然是多態(tài)了~~
class base
{
public:
void base::fun() {cout"Base"endl;}
};
class D:public base
{
public:
virtual void fun() {cout"D"endl;}
};
class C:public base
{
public:
virtual void fun() {base::fun();}
};
main()
{
base* c1=new c;
c1-fun() ;
return 0;
} 如果fun 是虛函數(shù)顯示什么,不是虛函數(shù)顯示什么?自己試試
C++中虛函數(shù)的作用是什么?它應(yīng)該怎么用呢?
C++中虛函數(shù)的作用:
1、為了方便使用多態(tài)特性,我們常常需要在基類(lèi)中定義虛擬函數(shù)。
2、在很多情況下,基類(lèi)本身生成對(duì)象是不合情理的。例如,動(dòng)物作為一個(gè)基類(lèi)可以派生出老虎、孔雀等子類(lèi),但動(dòng)物本身生成對(duì)象明顯不合常理。
為了解決上述問(wèn)題,引入了純虛函數(shù)的概念,將函數(shù)定義為純虛函數(shù)(方法:virtual ReturnType Function()= 0;),則編譯器要求在派生類(lèi)中必須予以重寫(xiě)以實(shí)現(xiàn)多態(tài)性。
同時(shí)含有純虛擬函數(shù)的類(lèi)稱(chēng)為抽象類(lèi),它不能生成對(duì)象。這樣就很好地解決了上述兩個(gè)問(wèn)題。
C++中虛函數(shù)的用法:
比如你有個(gè)游戲,游戲里有個(gè)虛基類(lèi)叫「怪物」,有純虛函數(shù) 「攻擊」。然后派生出了三個(gè)子類(lèi)「狼」「蜘蛛」「蟒蛇」,都實(shí)現(xiàn)了自己不同的「攻擊」函數(shù),比如狼是咬人,蜘蛛是吐絲,蟒蛇把你纏起來(lái)。
然后出現(xiàn)好多怪物的時(shí)候就可以定義一個(gè)?虛基類(lèi)指針數(shù)組,把各種怪物的指針給它,然后迭代循環(huán)的時(shí)候直接 monster[i]-attack() 攻擊玩家就行了,大概見(jiàn)下圖:
擴(kuò)展資料:
使用虛函數(shù)的注意事項(xiàng):
一、包含虛函數(shù)的類(lèi)指針列表會(huì)增大。
二、虛析構(gòu)函數(shù)
析構(gòu)函數(shù)的作用是在對(duì)象撤銷(xiāo)之前做必要的“清理現(xiàn)場(chǎng)”的工作。當(dāng)派生類(lèi)的對(duì)象從內(nèi)存中撤銷(xiāo)的時(shí)候,會(huì)先先調(diào)用派生類(lèi)的析構(gòu)函數(shù)然后再調(diào)用基類(lèi)的析構(gòu)函數(shù)。
當(dāng)我們new一個(gè)臨時(shí)對(duì)象時(shí),若基類(lèi)中包含析構(gòu)函數(shù),并且定義了一個(gè)指向該基類(lèi)的指針變量。
三、構(gòu)造函數(shù)不能聲明為虛函數(shù)
構(gòu)造函數(shù)不能聲明為虛函數(shù)。如果聲明為虛函數(shù),編譯器會(huì)自動(dòng)報(bào)出。
四、不在析構(gòu)或者構(gòu)造過(guò)程中調(diào)用虛函數(shù)
在析構(gòu)函數(shù)或者是構(gòu)造函數(shù)中,我們絕對(duì)不能調(diào)用虛函數(shù)。即使,我們?cè)跇?gòu)造函數(shù)或者析構(gòu)函數(shù)中調(diào)用虛函數(shù),也不會(huì)下降至派生類(lèi)中調(diào)用函數(shù)。
標(biāo)題名稱(chēng):c語(yǔ)言純虛函數(shù)怎么創(chuàng)建 c 純虛函數(shù)
轉(zhuǎn)載注明:http://www.ef60e0e.cn/article/doeedhi.html