作业帮 > 综合 > 作业

求大神解释,为什么程序运行出来是这个结果,如下

来源:学生作业帮 编辑:拍题作业网作业帮 分类:综合作业 时间:2024/06/11 19:10:41
求大神解释,为什么程序运行出来是这个结果,如下
Copy initianization constructor is called.
Copy initianization constructor is called.
Date:2012-12-13
Destructor is called.
Date:2012-12-13
程序如下:
# include
using namespace std;
class Date
{
public:
Date(int x,int y,int z)
{
year=x;
month=y;
day=z;
}
Date(const Date &D);
~Date()
{
cout
首先,
第一行的Copy initianization constructor is called.
这行是因为Date d1(2012,12,13);//这句话相当于先new Date(2012,12,13)然后将这个对象拷贝给d1,如果把main()中的这句话改为Date *d1=new Date(2012,12,13);同时应该将Date d2=d1;改为Date d2=*d1;否则报错,因为d1现在是指针.改了后第一行的"Copy ..."就没了.
第二行的"Copy..."则是因为 Date d2=d1;//等价于Date d2(d1);所以会调用拷贝构造函数.
第三行的"Destructor ..."是因为sameDay里面函数中的形参A被宰调用完sameDay后被释放掉了,因为它是临时的量,只在这个函数内起作用.
最后的在你输入a后,还会调用两次~Date,分别将d1和d1解析掉,你可以将
int a;
cin>>a;
改为system("pause");
然后敲任意键后会发现命令框中快速闪过两句"Destructor ..."