子类构造函数的执行顺序是:
静态成员对象的构造函数 -> 父类构造函数 -> 普通对象构造函数 ->子类构造函数
静态成员对象的构造函数只调用一次
子类析构函数的执行顺序(与构造函数相反):
子类析构函数 -> 普通成员对象析构函数 -> 父类析构函数 -> 静态成员对象析构函数
静态成员对象在程序结束的时候才会被销毁,所以静态成员对象的析构函数在程序结束的时候会调用
代码:
#includeusing namespace std; class A { public: A() { cout << __FUNCTION__ << endl; cout << "普通成员对象的构造函数3" << endl; } ~A() { cout << __FUNCTION__ << endl; cout << "普通成员对象的析构函数2" << endl; } }; class B { public: B() { cout << __FUNCTION__ << endl; cout << "静态成员对象的构造函数1" << endl; } ~B() { cout << __FUNCTION__ << endl; cout << "静态成员对象的析构函数4" << endl; } }; class C { public: C() { cout << __FUNCTION__ << endl; cout << "父类构造函数2" << endl; } ~C() { cout << __FUNCTION__ << endl; cout << "父类的析构函数3" << endl; } }; class D :public C { public: D() { cout << __FUNCTION__ << endl; cout << "子类的构造函数4" << endl; } ~D() { cout << __FUNCTION__ << endl; cout << "子类的析构函数1" << endl; } private: static B b; // 静态成员对象 A a; // 普通成员对象 }; B D::b; // static类型初始化 int main() { D d1; D d2; // 静态成员对象的构造函数只调用一次 cout << "--------" << endl; }
输入:输出:
父类构造函数2 A::A 普通成员对象的构造函数3 D::D 子类的构造函数4 C::C 父类构造函数2 A::A 普通成员对象的构造函数3 D::D 子类的构造函数4 -------- D::~D 子类的析构函数1 A::~A 普通成员对象的析构函数2 C::~C 父类的析构函数3 D::~D 子类的析构函数1 A::~A 普通成员对象的析构函数2 C::~C 父类的析构函数3 B::~B 静态成员对象的析构函数4



