1、C++中多态是一种泛型编程思想,虚函数是实现这个思想的语法基础;
2、虚函数列表简称虚表,出现在对象的头部,即虚表的首地址即对象地址;
3、通过创建好的对象,可以得到虚表,从而通过偏移可获取所有虚函数的地址;
4、示例代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | #include <iostream> using namespace std; // Person类定义 class Person{ public: virtual void MethodOne(){ // 虚函数 cout << __func__ << endl; } virtual void MethodTwo(){ // 虚函数 cout << __func__ << endl; } }; // Student类定义 class Student: public Person{ }; // 定义一个指向函数的指针类型 typedef void (*method)(); int main(int argc, const char *argv[]){ Person *p = new Student(); // 1、对象地址即虚表地址(对象的头部即虚表) // 2、取变量p的值得到虚表地址(强转为指向函数指针的数组) method *method_map = (method *)*(method*)p; // 虚函数数组中取值,单个对象为函数体地址 method method1 = *method_map[0]; method method2 = *method_map[1]; method1(); method2(); return 0; } |
5、执行结果:
MethodOne MethodTwo Program ended with exit code: 0 |