求分析一段代码解决思路

求分析一段代码
#include <iostream.h>
class A
{
public:
A()
{cout<<"In A cons.\n";}
virtual ~A()
{cout<<"In A des.\n";}
virtual void f1()
{cout<<"In A f1().\n";}
void f2()
{f1();}
};

class B:public A
{
public:
B()
{f1();cout<<"In B cons.\n";}
~B()
{cout<<"In B des.\n";}
};

class C:public B
{
public:
C()
{cout<<"In C cons.\n";}
~C()
{cout<<"In C des.\n";}
void f1()
{cout<<"In C f1().\n";}
};

void main()
{
A *pa=new C;
pa->f2();
delete pa;
}


运行结果
In A cons.
In A f1().
In B cons.
In C cons.
In C f1().
In C des.
In B des.
In A des.



------解决方案--------------------
构造函数是从基类开始的。。所有顺序是 A-》B-》 析构是从子类开始的 所以是c-》B-》A
------解决方案--------------------
探讨

构造函数是从基类开始的。。所有顺序是 A-》B-》 析构是从子类开始的 所以是c-》B-》A