1.多態的概念ios
由虛函數實現的動態多態性就是:同一類族中不一樣類的對象,對同一函數調用做出不一樣的響應。函數
先看下面這個簡單的例子:spa
#include<iostream> using std::cout; using std::endl; class A { public: void print(){cout << "I am A's print" << endl;} }; class B : public A { public: void print(){cout << "I am B's print" << endl;} }; int main() { A a; B b; A *ap; ap = &a; ap->print(); ap = &b; ap->print(); }
運行結果是設計
I am A's print指針
I am A's printcode
說明指向派生類對象的基類指針沒法調用派生類中的同名函數,而若是在A中print()函數前面加一個virtual,聲明爲虛函數,那麼運行結果就變成對象
I am A's printblog
I am B's print繼承
虛函數使咱們能用指向派生類對象的基類指針去調用派生類中的同名函數,簡單來講,這就是多態。io
2.多態的意義
在面向對象的程序設計中,咱們常常用到繼承,而從基類繼承的一些成員函數不符合派生類的須要,所以在派生類中要重寫這些函數,爲了方便仍使用相同的名字,因而有了同名函數的覆蓋。
在多層次的派生關係中,要調用各層次的同名函數,就得定義多個指向各個派生類對象的相應派生類指針,例如上面要調用B類的print(),就聲明一個B類的指針,而後指向b,再調用print(),或者直接用b對象來調用。當派生類層次多的時候,這都是很麻煩的方法而且不統一。
而虛函數的存在就使咱們可以用同一種方式去調用同一類族中不一樣類的全部的同名函數,經過指向派生類的基類指針來調用相應的派生類的同名函數,這就是虛函數的意義。
3.多態的實現原理
暫時懶得去理解。。。