c++規定 函數動態綁定 需要使用虛函數來實現。 具體的實現方法是:動態聯編 使用對象的引用或對象的指針 來操作 虛函數, 但是如果使用對象 來操作虛函數的話,仍然會採用靜態聯編的方式。
#include<iostream> using namespace std; class A { public: virtual void printA() { cout<<"A:printA()"<<endl; } }; class B :public A { public : virtual void printA() { cout<<"B:printA()"<<endl; } }; void printAB(A &aa) { aa.printA(); } int main() { A a= A(); B b= B(); A *pab=b;//pab 表示是一個指針 是A 類型的 但是指向了B類對象 // B *pba=a; 如果不註釋起來 會報錯 ,因爲只可以用父類的指針 指向子類的對象;而子類的 // 指針不可以指向父類的對象 pab->printA();//通過對象的指針 來使用 虛函數,實現動態聯編,結果會是 B:printA() //也可以使用 引用來對操作 A &aa = b; printAB(aa);//效果與 aa.printA() 一樣 都是 執行了 B:printA(); return 0; }
其實 之所以會有 動態聯編這種模式的出現 ,就是因爲 項目經理 會定義出 父類的操作,而員工 需要實現出 具體的 子類中與父類中對應的操作的實現, 而並不需要使用父類的操作, 所以動態聯編的結果 基本上都是 使用 父類的指針或者引用 來指向或者引用 子類的對象,從而達到 實現子類操作的目的。