因为D类是B类的子类,先调用B的构造函数。在B的构造函数里面先调用f方法。同时D类里面定义了成员变量a,所以运行B的构造函数后,初始化变量a,即调用A的构造函数。再调用D类的构造函数。最后是调用析构函数,析构函数的调用顺序是反过来的。