C++虛函數(shù)與純虛函數(shù)用法與區(qū)別2016/5/14 14:30:21 | 來(lái)源:中國(guó)教育在線(xiàn) | 發(fā)布者: | 查看:1303次

1.C++虛函數(shù)與純虛函數(shù)用法與區(qū)別,.虛函數(shù)和純虛函數(shù)可以定義在同一個(gè)類(lèi)(class)中,含有純虛函數(shù)的類(lèi)被稱(chēng)為抽象類(lèi)(abstract class),而只含有虛函數(shù)的類(lèi)(class)不能被稱(chēng)為抽象類(lèi)(abstract class)。

2.虛函數(shù)可以被直接使用,也可以被子類(lèi)(sub class)重載以后以多態(tài)的形式調(diào)用,而純虛函數(shù)必須在子類(lèi)(sub class)中實(shí)現(xiàn)該函數(shù)才可以使用,因?yàn)榧兲摵瘮?shù)在基類(lèi)(base class)

只有聲明而沒(méi)有定義。

3.虛函數(shù)和純虛函數(shù)都可以在子類(lèi)(sub class)中被重載,以多態(tài)的形式被調(diào)用。

4.虛函數(shù)和純虛函數(shù)通常存在于抽象基類(lèi)(abstract base class -ABC)之中,被繼承的子類(lèi)重載,目的是提供一個(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è)類(lèi)中含有純虛函數(shù),那么任何試圖對(duì)該類(lèi)進(jìn)行實(shí)例化的語(yǔ)句都將導(dǎo)致錯(cuò)誤的產(chǎn)生,因?yàn)槌橄蠡?lèi)(ABC)是不能被直接調(diào)用的。必須被子類(lèi)繼承重載以后,根據(jù)要求調(diào)用其子類(lèi)的方法。

//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 ;

}

凡本站注明“稿件來(lái)源:新科教育”的所有圖文音視頻,版權(quán)均屬新科所有,任何媒體、網(wǎng)站或個(gè)人未經(jīng)本網(wǎng)協(xié)議授權(quán)不得轉(zhuǎn)或以其他方式復(fù)制發(fā)表。已獲得本站協(xié)議 授權(quán)的媒體、網(wǎng)站,在下載使用時(shí)必須注明“稿件來(lái)源:新科教育”,違者本站將依法追究責(zé)任。
熱門(mén)課程
  • 您的電話(huà):

您好,新科教育精品課程
找到了感興趣的課程!