您现在的位置是:首页 >技术交流 >换个花样玩C++(9)用C语言来告诉你C++虚函数的真相网站首页技术交流
换个花样玩C++(9)用C语言来告诉你C++虚函数的真相
简介换个花样玩C++(9)用C语言来告诉你C++虚函数的真相
我们很多时候都直接使用C++的虚函数来实现多态,那么你有没有想过他在运行时是如何查找到他要调用的函数呢? 这篇文章将打开你的疑问大门,并且通过C语言的方式来实现虚函数指针,虚函数表,让你用另外一个角度看虚函数表
虚拟函数和派生类
C++编译器在构造这个vfptr、vtable以及调用类的虚拟函数时创建了大量抽象。为了理解这个虚拟函数是如何工作的,我们在下面的每个部分都用例子和C语言进行了说明。
在下面的例子中,我们有一个名为CShape的基类的例子。这是一个抽象基类。抽象基类或ABC是一个至少包含一个纯虚拟函数的类。
class CShape
{
public :
CShape();
virtual void Draw(void) = 0;
};
现在,我们从CShape派生出了两种新的派生类,称为CCircle和CRectangle。
class CCircle : public CShape
{
protected :
int x, y, r;
public :
CCircle(int x, int y, int r);
virtual void Draw(void);
};
class CRectangle : public CShape
{
protected :
int x, y, w, h;
public :
CRectangle(int x, int y, int w, int h);
virtual void Draw(void);
};
使用基类指针调用Virtual函数
在面向对象的环境中,我们总是使用抽象基类指针来指向派生对象,并调用基函数和相应的派生
风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。