子类构造函数的执行顺序是:
静态成员对象的构造函数 -> 父类构造函数 -> 普通对象构造函数 ->子类构造函数
静态成员对象的构造函数只调用一次
子类析构函数的执行顺序(与构造函数相反):
子类析构函数 -> 普通成员对象析构函数 -> 父类析构函数 -> 静态成员对象析构函数
静态成员对象在程序结束的时候才会被销毁,所以静态成员对象的析构函数在程序结束的时候会调用
代码:
#include
using 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
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)