📄 +
字号:
【例5.11】 分析下面程序中析构函数与构造函数的调用顺序。
#include<iostream>
using namespace std;
class object {
private:
int val;
public:
object(): val(0)
{cout<<"Default constructor for object“<<endl;}
object(int i): val(i)
{cout<<"Constructor for object“<<val<<endl;}
~object()
{cout<<"Destructor for object“<<val<<endl;}
};
class container{
private:
object one;//初始化顺序与对象成员产生的顺序有关
object two;//排在前面的先初始化
int data;
public:
container(): data(0)
{cout<<"Default constructor for container“<<endl;}
container(int i,int j,int k);
~container()
{cout<<"Destructor for container“<<data<<endl;}
};
container ∷ container(int i,int j,int k): two(i),one(j)//与初始化列表顺序无关
{ data=k;
cout<<"Constructor for container“<<data<<endl;
}
void main()
{ container obj,anObj(5,6,10); }
程序运行结果如下:
Default constructor for object//为对象成员one调用默认构造函数
Default constructor for object//为对象成员two调用默认构造函数
Default constructor for container//为对象obj调用container类的默认构造函数
Constructor for object 6//为对象成员one调用构造函数
Constructor for object 5 //为对象成员two调用构造函数
Constructor for container 10//为对象anObj调用container类的有参构造函数
Destructor for container 10//调用container类的析构函数析构对象anObj
Destructor for object 5//析构数据成员为5的对象two
Destructor for object 6//析构数据成员为6的对象one
Destructor for container 0//调用container类的析构函数析构对象obj
Destructor for object 0//析构对象two
Destructor for object 0//析构对象one在这个程序中,
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -