c++多态及其实现

多态是在父类函数的前面加上 “virtual” 关键字,使子类与父类同名的函数产生一种联系;

多态会用到两个特性:向上造型、动态绑定

向上造型是指:拿一个子类对象当作父类来看待,比如下边代码中的子类Eillpce对象ell当作父类Shape对象来看待;

动态绑定:当我要调用一个函数的时候,运行的时候才知道要调用哪个函数,编译的时候是不确定的;

class Shape
{
public:
    Shape();
    virtual ~Shape();  //析构为什么会有虚函数
    virtual void render();
    void move(const XYPos&);
    virtual void resize();
protected:
    XYPos center;
};

class Ellipse : public Shape
{
public:
    Ellipse(float maj, float minr);
    virtual void render();     //will define own
protected:
    float major_axis,minor_axis; 
};

class Circle : public Ellipse
{
public:
    Circle(float radius) : Ellipse(radius, radius) {}
    virtual void render();
};
...
void render(Shape* p)
{
    p->render();        //这里会根据传进来的形参类型,来决定调用哪个类的render函数
}
void func()
{
    Ellipse ell(10, 20);
    ell.render();
    Circle circ(40);
    circle.render();
    render(&ell);        // 这里是调用的Ellipse的render函数
    render(&circ);      //这里是调用了Circle的render函数
}

virtual写在函数前面的作用:如果使用指针或引用调用此函数时,只有在编译的时候才知道选哪个类的render函数去调用,我们这里说void render(Shape *p)中的p指针时多态指针,p的形态是不定可能是基类也可能是某一个子类;

多态的实现:

多态的实现

猜你喜欢

转载自www.cnblogs.com/go-ahead-wsg/p/12210835.html