下面程序的输出结果:
#include <iostream>
class A
{
virtual void g()
{
std::cout << "A::g" << std::endl;
}
private:
virtual void f()
{
std::cout << "A::f" << std::endl;
}
};
class B : public A
{
void g()
{
std::cout << "B::g" << std::endl;
}
virtual void h()
{
std::cout << "B::h" << std::endl;
}
};
typedef void(*Fun)(void);
int main()
{
B b;
Fun pFun;
for(int i = 0; i < 3; ++ i)
{
pFun = (Fun)*((int*) * (int *)(&b) + i);
pFun();
}
return 0;
}
本题主要考察了对虚函数的理解程度。在学习面向对象的多态性时一定要深刻理解虚函数表的工作原理。
输出结果如下:
B::g
A::f
B::h