首页 > 代码库 > 初学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运算符释放该内存。