虚函数的多态实现小解

要做批注的只有一点,虚表在这几个类中是共享的,并不是每一个类都生成一份自己的虚表。解析是,子类中覆盖的父类中的虚函数,在虚表中是替代了父类那个虚函数的位置,根据向上规则,就实现了多态。

#include<iostream>
using namespace std;
class base {
public:
    virtual void print() {
        cout << "base::print()" << endl;
    }
    virtual void goo() {
        cout << "base::goo()" << endl;
    }
};
class devired :public base {
public:
    virtual void print() {
        cout << "devired::print()" << endl;
    }
    virtual void go() {
        cout << "devired::go()" << endl;
    }
};
int main(void) {
    devired b;
    typedef void(*Fun)(void);
    Fun pfun = NULL;
    for (int i = 0; i < 3; i++)
    {
        pfun = (Fun)*((int*)*(int*)(&b)+i);
        pfun();
    }
    system("pause");
}

上述代码的运行结果

#include<iostream>
using namespace std;
class point {
public:
    virtual ~point() { cout << "~point()" << endl; }
    virtual point& mult(float) = 0;
    float x()const { return _x; }
    virtual float y()const { return 0; }
    virtual float z()const { return 0; }
protected:
    point(float x = 0.0) {};
    float _x;
};
class point2 :public point {
protected:
    float _y;
public:
    point2(float x = 0.0, float y = 0.0):point(x),_y(y){}
    ~point2() { cout << "~point2()" << endl; }
    point2& mult(float);
    float y()const { return _y; }
};
class point3 :public point2 {
protected:
    float _z;
public:
    point3(float x=0.0,float y=0.0,float z=0.0):point2(x,y),_z(z){}
    ~point3() { cout << "~point3()" << endl; }
    point3&mult(float);
    float z()const { return _z; }
};
void main(void) {
}

此图是侯捷书中所作

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值