所謂動態綁定,其實就是接口的實現由派生類完全覆蓋。
就是說原本聲明的類型是基類B,但是調用函數的時候執行的卻是不同派生類(由初始化或者賦值的時候定義)D的函數。動態綁定出現的條件有兩個
- 只有虛函數才能進行動態綁定。
- 必須通過基類類型的引用或指針進行函數調用。
例子
#include <iostream>
using namespace std;
class Base
{
public:
virtual void vf()
{
cout << "virtual function from Base " << endl;
}
void f()
{
cout << "function from Base" << endl;
}
};
class Derived:public Base
{
public:
void vf()
{
cout << "virtual function from Derived " << endl;
}
void f()
{
cout << "function from Derived" << endl;
}
};
int main()
{
Base* b;
b=new Derived();
b->vf();
b->f();
}
返回結果:
virtual function from Derived
function from Base