子对象构造函数和析构函数的调用顺序
2016-10-02 10:22
351 查看
#include<iostream> using namespace std; class sub_class { int x; public: sub_class(int z)//构造函数 { x=z; cout<<"Constructor_sub"<<x<<"called!"<<endl; } ~sub_class(){ cout<<"Destructor_sub"<<x<<"called!"<<endl; } void display() { cout<<x<<endl;} } ; class comp_class { int y; sub_class s; sub_class r; public: comp_class(int z); void display_comp(){cout<<y<<endl; } void display_sub_s(){s.display(); }; void display_sub_r(){r.display(); }; ~comp_class() { cout<<"Destructor_comp"<<y<<"called!"<<endl; } }; comp_class::comp_class(int z):s(20),r(-36) { y=z; cout<<"Constructor_comp"<<y<<"called!"<<endl; } int main() { comp_class obj(10); obj.display_sub_s(); obj.display_sub_r(); obj.display_comp(); }Constructor_sub20called!Constructor_sub-36called!Constructor_comp10called!20-3610Destructor_comp10called!Destructor_sub-36called!Destructor_sub20called!--------------------------------Process exited after 6.22 seconds with return value 0请按任意键继续. . .调用对象成员的析构函数的顺序正好与调用构造函数的顺序相反如果在成员初始化列表中将顺序颠倒为:comp_class::comp_class(int z): r(-36),s(20){ //define the constructor y = z; cout<<"Constructor_comp"<<y<<" called!"<<endl;}则运行结果仍然不变。将class comp_class对象成员排列改变class comp_class{int y;sub_class r;sub_class s;public:comp_class(int z);void display_comp(){cout<<y<<endl;}void display_sub_s(){s.display();};void display_sub_r(){r.display();};~comp_class(){cout<<"Destructor_comp"<<y<<"called!"<<endl;}};Constructor_sub-36called!Constructor_sub20called!Constructor_comp10called!20-3610Destructor_comp10called!Destructor_sub20called!Destructor_sub-36called!--------------------------------Process exited after 1.774 seconds with return value 0请按任意键继续. . .运行结果发生改变。调用对象成员的结构函数的顺序只决定于comp_class说明中对象成员的排列顺序,而与成员初始化列表中的顺序(r(-36),s(20))无关。
相关文章推荐
- 内嵌子对象时派生类构造函数与析构函数的调用顺序
- C++中构造函数和析构函数的调用顺序
- 继承中构造函数和析构函数地调用顺序
- C++继承中构造函数、析构函数调用顺序及虚析构函数
- C++继承中析构函数 构造函数的调用顺序以及虚析构函数
- c++学习笔记5,多重继承中派生类的构造函数与析构函数的调用顺序(二)
- 继承中构造函数和析构函数地调用顺序
- C++中构造函数与析构函数的调用顺序
- 拷贝构造,构造函数,析构函数的调用顺序
- C++:派生类的构造函数和析构函数的调用顺序
- C++学习笔记(7)----类的数组中构造函数和析构函数的调用顺序
- C++多个类中构造函数与析构函数的调用顺序
- C++之派生类的构造函数和析构函数调用顺序
- 重载new和delete后调用构造函数和析构函数顺序
- c++深/浅拷贝 && 构造函数析构函数调用顺序练习题
- 构造函数、拷贝构造函数和析构函数的的调用时刻及调用顺序
- 总结c++类的构造函数 拷贝构造函数 析构函数 赋值运算符重载的特点以及函数调用顺序
- 重载new和delete后调用构造函数和析构函数顺序
- C++派生类构造函数和析构函数的调用顺序
- 构造函数和析构函数调用顺序实例