C++类虚函数表
2016-03-10 15:50
381 查看
#include <iostream> #include <cstdlib> using namespace std; class Base1 { public: virtual void f() { cout << "Base1 f()" << endl; } virtual void g() { cout << "Base1 g()" << endl; } virtual void h() { cout << "Base1 h()" << endl; } }; class Base2 { public: virtual void f() { cout << "Base2 f()" << endl; } virtual void g() { cout << "Base2 g()" << endl; } virtual void h() { cout << "Base2 h()" << endl; } }; class Base3 { public: virtual void f() { cout << "Base3 f()" << endl; } virtual void g() { cout << "Base3 g()" << endl; } virtual void h() { cout << "Base3 h()" << endl; } }; class Base4 { public: void f() { cout << "Base4 f()" << endl; } void g() { cout << "Base4 g()" << endl; } void h() { cout << "Base4 h()" << endl; } }; class Child : public Base1, public Base2, public Base3, public Base4 { public: void h() { cout << "Child h()" << endl; } virtual void e() { cout << "Child e()" << endl; } /*virtual*/ long &getRef() { return value; } private: long value; }; int _tmain(int argc, _TCHAR* argv[]) { Child c; cout << sizeof(c) << endl; typedef void (*FUNC)(); FUNC pFunc; int **ptrTable = (int **)&c; cout << &c << endl; cout << &ptrTable[0] << endl; cout << &ptrTable[1] << endl; cout << &ptrTable[2] << endl; long &value = c.getRef(); cout << &value << endl; cout << "---------------------------------" << endl; pFunc = (FUNC)ptrTable[0][0]; pFunc(); pFunc = (FUNC)ptrTable[0][1]; pFunc(); pFunc = (FUNC)ptrTable[0][2]; pFunc(); pFunc = (FUNC)ptrTable[0][3]; pFunc(); // 注意getRef前的virtual修饰符 //pFunc = (FUNC)ptrTable[0][4]; //pFunc(); cout << "---------------------------------" << endl; pFunc = (FUNC)ptrTable[1][0]; pFunc(); pFunc = (FUNC)ptrTable[1][1]; pFunc(); pFunc = (FUNC)ptrTable[1][2]; pFunc(); cout << "---------------------------------" << endl; pFunc = (FUNC)ptrTable[2][0]; pFunc(); pFunc = (FUNC)ptrTable[2][1]; pFunc(); pFunc = (FUNC)ptrTable[2][2]; pFunc(); cout << "---------------------------------" << endl; system("pause"); return 0; }
相关文章推荐
- C++中引用、指针,传值的联系和区别
- 二分法查找的C++实现
- PHP中调用C/C++制作的动态链接库的教程
- 5.C语言之函数
- 我们编程吧 之 C++学习手册v0.1
- C++stringstream的clear()清空误区
- c++静态函数
- SYDZ 辗转相除法的原理与实现
- LeetCode: Find Peak Element
- C++近期常见问题面试总结(一)
- C++构造函数和析构函数的总结
- c++ 单例模式
- 高精度运算
- 常用工具类之C++线程安全集合类
- Concurrency::task(C++)
- c++第一次上机报告
- 第二次c++上机
- C++ CopyFile函数的用法
- C++中的find函数
- 快速排序的Java语言与C语言实现