C++ 这里并没有用到继承为什么还要用虚函数?

来源:百度知道 编辑:UC知道 时间:2024/06/22 02:09:29
#include<iostream>
using namespace std;
class B
{
public:
virtual void fun1()
{
cout<<"B::fun1<<endl;
}
virtual void fun2()
{
cout<<"B::fun2"<<endl;
}
};
int main()
{
typedef void(*FUN)();
B b;
void **ptable=*(void***)&b;
FUN f1=(FUN)(*ptable);
f1();
FUN f2=*((FUN*)(((FUN*)(ptable)+1));
f2();
}
还有下面的主函数体我也不是很明白

这个例子不目的不是为了展示 virtual 的多态继承性质,而是为了表明类 B 有虚函数表,你用
cout<<sizeof(b)<<endl;
测试一下,就会发现输出为 4
但如果将 virtual 关键字都去掉,再打印,输出为 1
虚函数表是一个指针它就放在 b 所在内存的起始地址