一道虚函数的有关问题,恳请高手解答

一道虚函数的问题,恳请高手解答
代码如下
C/C++ code

#include <stdio.h>

class A
{
public:
    A* a;
    A()
    {
        a = this;
    }
    virtual void fun()
    {
        printf("A::fun\n");
    }
};

class B:public A
{
public:
    int i;
    B():i(20){};
    virtual void fun()
    {
        printf("B::fun\n");
    }
};

void main()
{    
    B b;
    A* a=b.a;
    a->fun();

}




运行结果怎么会是B的fun?

b.a的结果为什么是B*类型的?
B b;的时候,是先运行A类的构造函数,那时候,那个this是B*吗?

------解决方案--------------------
自己想通就好
------解决方案--------------------
接分…………
------解决方案--------------------
第一次猜错结果了,还好认真看了下题目。。。