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

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