您的位置:首页 > 其它

4000 虚函数的多态实现小解

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

#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) {
}


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: