码迷,mamicode.com
首页 > 编程语言 > 详细

c++多态及其实现

时间:2020-01-19 09:14:37      阅读:69      评论:0      收藏:0      [点我收藏+]

标签:span   strong   动态绑定   特性   minor   virt   resize   析构   amp   

多态是在父类函数的前面加上 “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的形态是不定可能是基类也可能是某一个子类;

多态的实现:

多态的实现

c++多态及其实现

标签:span   strong   动态绑定   特性   minor   virt   resize   析构   amp   

原文地址:https://www.cnblogs.com/go-ahead-wsg/p/12210835.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!