您现在的位置是:首页 >技术交流 >换个花样玩C++(9)用C语言来告诉你C++虚函数的真相网站首页技术交流

换个花样玩C++(9)用C语言来告诉你C++虚函数的真相

资深专家-高司机 2024-06-11 18:01:02
简介换个花样玩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函数

在面向对象的环境中,我们总是使用抽象基类指针来指向派生对象,并调用基函数和相应的派生

风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。