请教上面这段代码为什么会这样输出

请问下面这段代码为什么会这样输出

#include <iostream>
using namespace std ;
class A
{
public:
A() {display() ;}
virtual void display() {cout << "AAA"  ;}
};
class B:public A
{
public:
B() {display() ;}
virtual void display() {cout << "BBB"  ;}//对基类的虚函数重写
};
int main()
{
B b ;
system("pause") ;
return 0 ;
}

为什么会输出AAAA BBB?以我看虚函数会调用根据对象类型调用派生类的虚函数呀,我以为要输出BBB BBB呢。

------解决方案--------------------
先执行A的构造函数,这时候执行
display() ;

相当于执行
this->display() ;
当然调用的是它自己的函数
只有在类外面执行的时候才会根据对象类型选择派生类的函数
------解决方案--------------------
构造先执行父类再子类
析构相反