cpp中三种多态

cpp中三种多态

多态(Polymorphism)是一个大家耳熟能详的概念。在传统的C++教学中,我们通常认为“多态”是函数在类继承体系中所表现出来的一种行为。比如,在下面的例子中,

template <typename T> T convertFromInt(int v);
void f1() { 
    convertFromInt<float>(5);
    convertFromInt<double>(5);
}

struct Base {  
    virtual void doWork() { 
        // blah blah blah
    }
    virtual ~Base() { }
};

struct Derived: public Base{ 
    virtual void doWork() { 
        // blah blah blah 2
    }
};

void f2(){ 
    Base* p = new Derived();
    p->doWork();
    delete p;
}

void Add(int, int);
void Add(double, double);
void f3(){ 
    Add(15, 17);
    Add(1.56, 2.28);
}

我们通常只认为f2()中的行为是由多态机制决定的。

然而,在更广阔的计算机领域中,多态这个词并不只是局限在类继承和虚函数上。只要是同名函数能够根据参数的类型不同而获得不同的实现,我们都可以叫它“多态”。

多态可以分成三类,Ad hoc 多态(Ad hoc ~),参数化多态(Parametric ~),子类型多态(Subtype ~)。

对于Ad hoc多态,首先要神会这个词,我个人通常将其简单替换成 ”The fucking“,“那个多态”。C++中的重载,例子中的函数 f3() 就属于此类。多个同名函数根据参数的不同,选择不同的实现。第二种的典型例子,就是例子中的f1(),通过参数化类型来完成多态。第三种,局限于多态化的函数参数类型是Subtyping的关系,它是C++上狭义的多态,也就是f2()。

参考:

Polymorphism (computer science)

    原文作者:异构计算大师
    原文地址: https://blog.csdn.net/qq_43325061/article/details/118582887
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞