前言
在 googletest的源码中,看到gtest-matchers.h 中实现的MatcherBase 类自定义了一个 VTable,这种设计实现了一种类似于C++虚函数的机制。C++中的虚函数机制实质上就是通过这种方式实现的,本文用c语言自定义虚函数表VTable实现了一下virtual的功能,来深刻理解其机制。我们通过创建存储函数指针的结构体来模拟这种行为。

C++的运行时多态
如果我们在C++中有一个抽象基类 Shape ,定义了纯虚函数GetArea() 用于计算面积。对于不同的派生于 Shape 的类,面积计算方法会不一样。比如,对于圆形 Circle类,是 Shape 的一种,其特有属性为半径r,面积计算公式为 π·r² ;对于正方形 Square类,其特有属性为边长d,其面积计算公式为 d² 。
基类Shape 的定义如下:
class Shape {
public:
virtual double GetArea()=0;
};
派生类Circle 继承于 Shape,定义如下:
class Circle: public Shape {
public:
Circle(double r):radius(r){
}
double GetArea(

最低0.47元/天 解锁文章
573

被折叠的 条评论
为什么被折叠?



