一. C++中多態的定義:多態性是允許你將父對象設置成爲和一個或更多的他的子對象相等的技術,賦值之後,父對象就可以根據當前賦值給它的字對象的特性以不同的方式運作。簡單的說,就一句話:允許子類類型的指針賦值給父類類型的指針。
二. 動態綁定是多態的基礎。
動態綁定的定義:在程序運行時刻,找到對象指針或引用所調用的正確的函數。
動態綁定的原理:爲包含有virtual型的函數類建一個虛函數表(爲指針數組),表內存儲虛函數,當類調用構造函數時,會爲每一個對象生成至少一個指向虛函數表的虛指針,當此類的對象調用虛函數時,會用虛指針指向虛表裏 面的虛函數地址,從而正確調用函數。
三. 多態需要的條件。
1>要有 繼承
2>函數的覆蓋
3>要有虛函數
4>基類指針或者基類的引用指向派生類對象
上代碼:
class A{ private: int a; public: A(int i):a(i){} virtual void print(){ cout<<"a="<<a<<endl; } int get_a(){ return a; } }; class B{ private: int b; public: B(int j):b(j){} virtual void print(){ cout<<"b="<<b<<endl; } int get_b(){ return b; } }; class C : public A,public B{ private: int c; public: C(int i,int j,int k):A(i),B(j){ c=k; } virtual void print(){ A::print(); B::print(); cout<<"c="<<c<<endl; } void get_ab(){ cout<<get_a()<<" "<<get_b()<<endl; } };
#include <iostream> #include "Muti_Inheritance.h" int main(int argc, const char * argv[]) { // insert code here... C x(5,8,10); A *ap = &x; // A的指針指向C類對象 ap->print(); //輸出A類中的print(由動態綁定實現) x.A::print(); //輸出A類的print x.get_ab(); //(重寫)調用C類的get_ab() std::cout << "Hello, World!\n"; return 0; }