构造函数
构造函数是一个特殊的成员函数,名字与类名相同,创建类类型对象时由编辑器自动调用,保证每个数据成员都有一个合适的初始值,并且在对象的生命周期内只调用一次。
构造函数是特殊的成员函数,需要注意的是,构造函数的名称虽然叫构造,但是需要注意的是构造函数的主要任务并不是开空间创建对象,而是初始化对象。
构造函数的特征
1.函数名与类名相同;2.无返回值;3.对象实例化时编辑器自动调用对应的构造函数;4.构造函数可以重载。
这里我们用日期类来大概看看构造函数的样子。
public:
//1.无参构造函数
Date()
{}
//2.带参构造函数
Date(int year,int month,int day)
{
_year=year;
_month=month;
_day=day;
private:
int _year;
int _month;
int _day;
};
void TestDate()
{
Date d1;//调用无参构造函数
Date d2(2015,1,1);//调用带参的构造函数
}
如果本身类中没有构造函数的话,C++编译器会默认生成一个无参的构造函数,但是用户如果自己定义了则编辑器不会再生成
无参的构造函数和缺省构造函数都称为默认构造函数,并且默认构造函数只能有一个。
析构函数
析构函数:作用与构造函数功能相反,析构函数不是完成对象的销毁,局部对象销毁工作是由编辑器完成的。而对象在销毁时会自动调用析构函数,完成类的一些资源清理工作。
析构函数是特殊的成员函数。
析构函数的特征
1.析构函数名是在类型名前加上字符~;2.无参数无返回值;3.一个类有且只有一个析构函数。若未显示定义,系统会自动生成一个析构函数;4.对象生命周期结束时,C++编译系统自动调用析构函数。
typedef int DateType;
class SeqList
{
public:
SeqList(int capacity =10)
{
_pData = (DataType*)malloc(capacity *sizeof(DataType));
assert(_pData);
_size=0;
_capacity=capacity;
}
~SeqList()
{
if(_pData)
{
free(_pData);//释放堆上空间
_pData=nullptr;//将指针置空
_capacity=0;
_size=0;
}
}
private:
int* _pData;
int _size;
int _capacity;
关于编辑器自动生成的析构函数,对会自定义类型成员调用它的析构函数。