#include<iostream>
using namespace std;
class CDate
{
private:
int y, m, d;
public:
CDate(int y=2001, int m=1, int d=1);
void print();
~CDate();
CDate(const CDate& t);
};
CDate::CDate(int y, int m, int d)
{
this->y = y;
this->m = m;
this->d = d;
}
void CDate::print()
{
cout << y << "-" << m << "-" << d << endl;
}
CDate::~CDate()
{
cout<<"destructor..."<< y << "-" << m << "-" << d << endl;
}
CDate::CDate(const CDate& t)
{
y = t.y;
m = t.m;
d = t.d;
}
int main()
{
CDate t, b(t);
t.print();
return 0;
}
以上的代码是对日期的一个定义;可以看到里面运用的析构函数与拷贝函数;
我在这里为大家解释一下析构函数,与拷贝函数是什么:
1.析构函数:原型:~类名()
这里“~”注意不可丢;通俗的来讲,析构函数就是当有一个函数停止调用时候,这时候析构函数就负责清理内存,否则的会函数的大量使用,会占用许多内存;
大家看上面主函数当中对象 t 与 b ,若只是实现析构函数的话,它的结果如下图:
这里的结果为了让大家看得清楚,我将b赋值,即b(2022,4,2);
大家可以看到,先清除“b”的结果内存,后清楚“ t ”的内存;这里是析构函数的作用效果,我将它称为“倒序清除”,后用的先处理,先用的后处理。
2.拷贝函数:我们也可以称为复制函数。
赋值函数:原型如下:类名(const 类名&对象)
记住:这里取地址符不可丢,这里为后面对该函数的定义极为有用。大家开一下上面的代码,我才用的算术运算符进行赋值,其中用了“.”进行访问。大家看如下的结果:
拷贝函数,参数传递形式,是从实参传给形参,因而“b”与“t“的赋值几位定义中的实参。
(若哪里有错误,欢迎大家来指正!)