虛函數(shù)
- 在類的定義中,前面有 virtural 關(guān)鍵字的成員函數(shù)被稱為虛函數(shù)。
class base{
virtual int get();
};
int base::get(){}
- virtual 關(guān)鍵字只用在類定義里的函數(shù)聲明中,寫函數(shù)體時(shí)候不用。
- 構(gòu)造函數(shù)和靜態(tài)成員函數(shù)不能是虛函數(shù)。
多態(tài)的變現(xiàn)形式一
- 派生類的指針可以賦給基類指針。
- 通過基類指針調(diào)用基類和派生類中的同名虛函數(shù)時(shí):
- 若該指針指向一個(gè)基類的對象,那么被調(diào)用時(shí)基類的虛函數(shù);
- 若該指針指向一個(gè)派生類的對象,那么被調(diào)動(dòng)的是派生類的虛函數(shù)。
這種機(jī)制就叫做“多態(tài)”。
class CBase{
public:
virtual void SomeVirtualFunction(){}
};
class CDerived:public CBase{
public:
virtual void SomeVirtualFunction(){}
};
int main() {
CDerived ODerived;
CBase * p = & ODerived;
//調(diào)用哪個(gè)虛函數(shù)取決于p 指向哪種類型的對象,編譯的時(shí)候是不會(huì)知道的,直到運(yùn)行的時(shí)候才會(huì)知道。
p-> SomeVirtualFunction();
return ();
}
多態(tài)的表現(xiàn)形式二
- 派生類的對象可以賦給基類引用
- 通過基類引用調(diào)用基類和派生類中的同名虛函數(shù)時(shí):
- 若該引用引用的是一個(gè)基類的對象,那么被調(diào)用時(shí)基類的虛函數(shù);
- 若該引用引用的是一個(gè)派生類的額對象,那么被調(diào)用的是派生類的虛函數(shù)。
這種機(jī)制也叫做“多態(tài)”。
class CBase{
public:
virtual void SomeVirtualFunction(){}
};
class CDerived:public CBase{
public:
virtaul void SomeVirtualFunction(){}
};
int main(){
CDerived ODerived;
CBase & r = ODerived;
//調(diào)用哪個(gè)虛函數(shù)取決于 r 引用哪中類型的對象
r. SomeVirtualFunction();
return 0;
}
多態(tài)的作用
在面向?qū)ο蟮某绦蛟O(shè)計(jì)中使用多態(tài),能夠增強(qiáng)程序的可擴(kuò)充性,即程序需要修改或增加功能的時(shí)候,需要改動(dòng)和增加的代碼比較少。