C++ 二十三课 多态性及其实现

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/clksjx/article/details/88852638

《面向对象程序设计C++——网易云课堂,翁恺》

class XYPos{...};//坐标点

class Shape{
public:
    Shape();
    virtual ~Shape();
    void move(const XYPos&);
    virtual void render();
    virtual void resize();
protected:
    XYPos center;
};


class Ellipse : public Shape{
public:
    Ellipse(float maj, float minr);
    virtual void render();//此处virtual可不加,只要有一代父类有virtual,后面的子孙类的该函数都是virtual。
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();//对Shape及子类均可使用
}


void func(){
    Ellipse ell(10, 20);
    ell.render();
    Circle circ(40);
    circ.render();
    render(&ell);//向上造型
    render(&circ);//向上造型
}

virtual的作用:通过指针或者引用调用函数时,要到调用时才能具体知道参数的类型。即动态绑定。
代码中的p称为多态对象。

猜你喜欢

转载自blog.csdn.net/clksjx/article/details/88852638