一.虚函数指针
指向了哪个类的虚函数列表,是 子类自己的,判断依据: 真实存在的对象(new 哪个类,就指向哪个累的虚函数列表)
二.继承下虚函数列表
1、继承:子类不但继承了父类的成员,也会继承父类的额虚函数列表(拷贝到子类的虚函数列表中)。
2、检查重写: 检查子类中是否有重写父类的虚函数
有 | 原位置替换掉(覆盖) |
没有 | 父类的虚函数仍然保留在原位置 |
3、如果子类中有单独的虚函数,则按照其声明顺序,依次添加到虚函数列表结尾。
#include <iostream>
using namespace std;
class CF {
virtual void fun1() {
cout << "1" << endl;
}
virtual void fun2() {
cout << "2" << endl;
}
};
class CS :public CF {
void fun1() {
cout << "11" << endl;
}
virtual void fun3() {
cout << "3" << endl;
}
};
int main()
{//第一种测试方式:调试
CF* fpa = new CS;
CS cs;
CF cf;
//第二种测试方式:代码
typedef void(*P_FUN)();
P_FUN* __vfptr=(P_FUN*)(*(int***)fpa);
P_FUN p_fun1 = __vfptr[0];
P_FUN p_fun2 = __vfptr[1];
P_FUN p_fun3 = __vfptr[2];
(*p_fun1)();
(*p_fun2)();
(*p_fun3)();
system("pause");
return 0;
}