虚函数表
假设有类:
class Base {
public:
virtual void f() { cout << "Base::f" << endl; }
virtual void g() { cout << "Base::g" << endl; }
virtual void h() { cout << "Base::h" << endl; }
};
则:
Base b;
cout << "虚函数表地址:" << (int*)(&b) << endl;
cout << "虚函数表 — 第一个函数地址:" << (int*)*(int*)(&b) << endl;
实际运行经果如下:
虚函数表地址:0012FED4
虚函数表 — 第一个函数地址:0044F148
((int*)*(int*)(&b)+0); // Base::f()函数的地址
((int*)*(int*)(&b)+1); // Base::g()函数的地址
((int*)*(int*)(&b)+2); // Base::h()函数的地址
图解:
继承:
Derive d; 的虚函数表如下: