首页 > 代码库 > 初学C++-----------------类的构造函数、析构函数
初学C++-----------------类的构造函数、析构函数
1、构造函数
特征:
1)与类名同名。
2)无函数返回类型说明。
3)主要是完成对象的初始化。
4)当一个新的对象被建立时(a.在对象的说明语句中 b.用new函数新建一个动态对象时),系统自动调用其相应的构造函数。
5)可有多个构造函数(重载):多个构造函数的函数名相同,但是其形参在数据类型或数量上有差异,系统会根据参数的性质和个数来选择合适的构造函数。
6)构造函数一定是公有函数。
7)构造函数的执行是在系统创建对象时自动执行的。
定义构造函数的一般形式为:
class 类名
{
public:
类名(形参列表);//构造函数原型
其他成员
};
类名::类名(形参表)
{
函数体
}
默认的构造函数:
若某个类定义中未给出显式的构造函数,则系统自动给出一个默认的构造函数:
<类名> (void)
{
}
若类定义了构造函数,则系统不提供默认的构造函数,此时,若还想要一个无参数的构造函数,则需用户另行定义。
当构造函数的参数具有默认值时,称为具有缺省参数的构造函数。使用默认值时需注意:
1)只能出现在类定义的接口部分,而不能出现在类定义的实现部分。
2)所有具有默认值的参数必须处在参数表的最右边。
3) 在使用具有缺省参数的构造函数时,要防止二义性。
class sample
{ private:
int x,y,z;
public:
sample();
sample(int i, int j, int k=10);
};
sample:: sample()
{ x=1; y=2;z=5; }
sample:: sample(int i, int j, int k)
{ x=i; y=j;z=k; }
void main()
{
sample x(20,30,80);
sample y; //产生二义性
}
2、析构函数
特征:
1)函数名为:~类名。
2)无函数返回类型说明且无参数,不能随意调用,没有重载。
3)完成对象撤销前的善后工作。
4)当对象退出其说明区域,或使用delete释放动态对象时,系统自动调用其析构函数。如果用户未定义析构函数,则系统会生成和调用一个默认的析构函数。
5)一个类只有一个析构函数,也可缺省。
6)对象被析构的顺序与其建立的顺序正好相反。
7)当在构造函数中用new运算符为类的数据成员动态分配内存时,则相应地在析构函数中必须用delete运算符释放该内存。