析构函数的功能:
是用来释放一个对象。
例5.5 重新定义日期类 //tdate1.h class TDate1 { public:
TDate1(int y,int m,int d); ~TDate1( );
void IsLeapYear( ); void Print( ); private:
int year,month,day; };
TDate1::TDate1(int y,int m,int d) { year=y; month=m; day=d;
cout<<”Constructor called.\\n”; }
TDate1::~TDate1( )
{ cout<<”Destructor called.\\n”;}
void TDate1::IsLeapYear( )
{ if(year%4==0 && year0!=0 ||
year@0==0)
cout<<”Is leap year.\\n”; else
cout<<”Is not leap year.\\n”; }
void TDate1::Print( )
{ cout< #include { TDate1 today(2004,10,8), tomorrow(2004.10,9); cout<<”today is “; today.Print( ); today.IsLeapYear( ); cout<<”tomorrow is “; tomorrow.Print( ); } 输出: Constructor Called. Constructor Called. today is 2004.10.8 Is leap year. tomorrow is 2004.10.9 Destructor Called. Destructor Called. 构造函数的特点: 1.构造函数是成员函数。 2.构造函数与类同名,不指定函数类型。 3.构造函数可以重载。 4.在创建对象时系统自动调用构造函数,在程序中不能直接调用构造函数。 析构函数的特点: 1.析构函数是成员函数。 2.析构造函数与类同名,并在前面加“~”字符,不指定函数类型,也没有参数。 3.一个类中只可以定义一个析构函数。 4.系统可以自动调用析构函数,在程序中也可以直接调用析构函数。 5.3.2 缺省构造函数和缺省析构函数 缺省构造函数的格式: 类名::缺省构造函数名( ) { } 缺省构造函数在类中没有定义任何构造函数时系统自动生成;也可以用户自己定义。 例如: Tpoint p1,p2; 缺省构造函数对p1和p2进行初始化。对象的所有数据成员都是不确定的。 缺省析构函数的格式: 类名::~缺省析构函数名( ) { } 缺省析构函数在类中没有定义析构函数时系统自动生成,是一个空函数。 例5.6 重新定义日期类 //tdate2.h class TDate2 { public: TDate2( ); ~TDate2( ); void SetDate(int y,int m,int d); void IsLeapYear( ); void Print( ); private: int year,month,day; }; TDate2::TDate2( ) { cout<<”Constructor called.\\n”;} TDate2:: ~TDate2() { cout<<”Destructor called.\\n”;} void TDate2::SetDate(int y,int m,int d) { year=y; month=m; day=d; } void TDate2::IsLeapYear( ) { if(year%4==0 && year0!=0 || year@0==0) ”Is leap year.\\n”; ”Is not leap year.\\n”; cout<< else cout<<