C++ 動態多態與靜態多態

 

C++中有兩種多態: 動多態(運行期多態)和靜多態(編譯期多態),而靜多態主要通過模板來實現,宏也是實現靜多態的一種途徑。


模板不採用虛函數機制,所以所有調用在編譯期就可確定,因此它是靜態的。

 

動多態

 

基於繼承和虛函數,多態的設計思想主要在於:對於幾個相關對象的類型,確定它們之間的一個共同功能集;然後在基類中,把這些共同的功能聲明爲多個虛函數接口。每個具體類都派生自基類,生成了具體對象之後,客戶端代碼就可以通過基類類型的引用或指針來操作這些對象,並且能夠通過這些引用或者指針來實現虛函數的調度機制。也就是說,利用一個基類類型的指針或者引用來調用虛成員函數,實際上將可以調用具體類對象的相應成員。這種動多態是C++程序設計裏面最常見的。

 


靜多態

 

模板也能夠被用於實現多態。 編譯期間實現。

例子:


class Circle
{
    public:
        void draw() const;
        
        ...
};


class Line
{
    public:
        void draw() const;
        ...
};
....


//
//上面兩個類的使用:
//

template <typename GeoObj>
void myDraw(GeoObj const& obj)     // GeoObj是模板參數
{
    obj.draw();      // 根據對象的類型調用相應的draw()
}
......

int main()
{
    Line l;
    Circle c;

    myDraw(l);       
    myDraw(c);    

 

c++ 模板技術的實現

 

https://blog.csdn.net/lianhunqianr1/article/details/79966911


Ref:

https://www.cnblogs.com/yyxt/p/5157517.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章