头文件 TTime.h
class TTime
{
int hour;
int minute;
int second;
public:
TTime(); //重载的无参构造函数
TTime(int h,int m,int s);//有参构造函数
TTime(const TTime & a); //拷贝构造函数
~TTime(); //析构函数
void SetTime(int h,int m,int s);
void PrintTime();
};
函数定义 TTime.cpp
#include <iostream>
#include "TTime.h"
using namespace std;
TTime::TTime()
{
hour=minute=second=0;//无参函数赋初值
}
TTime::~TTime()
{
cout<<"Good Bye!"<<endl;
}
TTime::TTime(int h,int m,int s)
{
hour=h;minute=m;second=s;
}
TTime::TTime(const TTime & a)//拷贝函数定义
{
cout<<"AAAAAAAAAAAAAAAA"<<endl;
hour=a.hour; //this->hour=a.hour
minute=a.minute;//this->minute=a.minute
second=a.second;//this->second=a.second;
//*this=a
}
void TTime::SetTime(int h,int m,int s)
{
hour=h;minute=m;second=s;
}
void TTime::PrintTime()
{
cout<<hour<<":"<<minute<<":"<<second<<endl;
}
主函数 main.cpp
#include <iostream>
#include "TTime.h"
using namespace std;
int main()
{
TTime t1(10,40,50),t2,t3(t1);//t2输出默认初始值,t3复制t1
//t3=t1是将t1赋值给t3
t1.PrintTime();
t2.PrintTime();
t3.PrintTime();
t1.SetTime(10,20,30);
t1.PrintTime();
return 0;
}
结果:
注:调用析构函数未显示可能是编译器问题,可将cout换成printf进行输出,就可显示
默认构造函数:自动提供,不赋初值
TTime::TTime
{
}
若无构造函数时,
TTime t1;
t1.PrintTime(); //ok,但为随机值
TTime t1(10,40,50);//error,无构造函数
t1.PrintTime();
当提供TTime构造函数时
TTime t1(10,40,50),t2;
//error,只要提供构造函数,系统就不再提供默认构造函数
t1.PrintTime();
t2.PrintTime();
若再提供重载的无参构造函数,则上式成立
用t3=t1赋值时系统提供默认赋值运算符重载
t3(t1)是复制
析构函数:对象所在的函数已调用完毕时,系统自动执行析构函数,如果不写,系统自动生成,无参,不能重载,先创建的对象后释放,先释放t3,再释放t2,最后释放t1。