3 回答

TA貢獻(xiàn)1785條經(jīng)驗(yàn) 獲得超8個(gè)贊
基類定義純虛函數(shù)后。子類必須完善函數(shù)體才可以定義對(duì)象。如果不對(duì)此純虛函數(shù)完善。依舊無(wú)法定義對(duì)象。也就是說(shuō)對(duì)子類也有限制作用。有利于接口一致。

TA貢獻(xiàn)2019條經(jīng)驗(yàn) 獲得超9個(gè)贊
純虛函數(shù)是為了聲明一個(gè)虛擬基類而用的,在C++中,虛擬基類(也叫抽象類)是為了定義公共界面用了,說(shuō)白了虛擬基類就是為了派生用的,讓派生類遵守基類定義的操作,還有虛擬基類沒(méi)有對(duì)象,就是沒(méi)有變量。

TA貢獻(xiàn)1874條經(jīng)驗(yàn) 獲得超12個(gè)贊
C++中的虛函數(shù)和純虛函數(shù)用法 1. 虛函數(shù)和純虛函數(shù)可以定義在同一個(gè)類(class)中,含有純虛函數(shù)的類被稱為抽象類(abstract class),而只含有虛函數(shù)的類(class)不能被稱為抽象類(abstract class)。 2. 虛函數(shù)可以被直接使用,也可以被子類(sub class)重載以后以多態(tài)的形式調(diào)用,而純虛函數(shù)必須在子類(sub class)中實(shí)現(xiàn)該函數(shù)才可以使用,因?yàn)榧兲摵瘮?shù)在基類(base class) 只有聲明而沒(méi)有定義。 3. 虛函數(shù)和純虛函數(shù)都可以在子類(sub class)中被重載,以多態(tài)的形式被調(diào)用。 4. 虛函數(shù)和純虛函數(shù)通常存在于抽象基類(abstract base class -ABC)之中,被繼承的子類重載,目的是提供一個(gè)統(tǒng)一的接口。 5. 虛函數(shù)的定義形式:virtual {method body} 純虛函數(shù)的定義形式:virtual { } = 0; 在虛函數(shù)和純虛函數(shù)的定義中不能有static標(biāo)識(shí)符,原因很簡(jiǎn)單,被static修飾的函數(shù)在編譯時(shí)候要求前期bind,然而虛函數(shù)卻是動(dòng)態(tài)綁定(run-time bind),而且被兩者修飾的函數(shù)生命周期(life recycle)也不一樣。 6. 如果一個(gè)類中含有純虛函數(shù),那么任何試圖對(duì)該類進(jìn)行實(shí)例化的語(yǔ)句都將導(dǎo)致錯(cuò)誤的產(chǎn)生,因?yàn)槌橄蠡悾ˋBC)是不能被直接調(diào)用的。必須被子類繼承重載以后,根據(jù)要求調(diào)用其子類的方法。 以下為一個(gè)簡(jiǎn)單的虛函數(shù)和純虛寒?dāng)?shù)的使用演示,目的是拋磚引玉! #include //father class class Virtualbase { public: virtual void Demon()= 0; //prue virtual function virtual void Base() {cout<<"this is farther class"<}; //sub class class SubVirtual :public Virtualbase { public: void Demon() { cout<<" this is SubVirtual!"< void Base() { cout<<"this is subclass Base"<}; /* instance class and sample */ void main() { Virtualbase* inst = new SubVirtual(); //multstate pointer inst->Demon(); inst->Base(); // inst = new Virtualbase(); // inst->Base() return ; }
- 3 回答
- 0 關(guān)注
- 256 瀏覽
添加回答
舉報(bào)