C++類的繼承機制的一個特點是多態性。所謂多態性是指子類和父類中具有相同函數名但不同操作的函數。那麼問題來了,同一個函數名在調用時該選擇那個函數體呢?其中一個方法是靜態綁定,即編譯時選擇函數體,也叫缺省的函數調用方式。
動態綁定即在運行時選擇函數體,是橋接子類和父類之間同名函數的接口。側重於父類對象對子類同名函數調用的實現。動態綁定通過虛函數實現,使用規則有4點:
1. 要有一個繼承層次
2. 在基類中要定義虛函數
3. 在派生類中要對基類中定義的虛函數進行重定義
4. 要通過基類指針(或基類引用)來調用虛函數
case:
#include <iostream>
using namespace std ;
class a
{
public:
virtual void h(double) {
cout << "aaaaaa!" << endl ;
}
};
class b: public a
{
public:
void h(double) {
cout << "bbbbbb!" << endl ;
}
} ;
int main()
{
class a *p , pp;
class b obj ;
p = &obj ;
p->h(77.08);
pp.h(77.08);
return 0 ;
}