初学C++-----------------类的构造函数、析构函数

1、构造函数

特征:

  1)与类名同名。

  2)无函数返回类型说明。

  3)主要是完成对象的初始化。

  4)当一个新的对象被建立时(a.在对象的说明语句中 b.用new函数新建一个动态对象时),系统自动调用其相应的构造函数。

  5)可有多个构造函数(重载):多个构造函数的函数名相同,但是其形参在数据类型或数量上有差异,系统会根据参数的性质和个数来选择合适的构造函数。

  6)构造函数一定是公有函数。

  7)构造函数的执行是在系统创建对象时自动执行的。

定义构造函数的一般形式为:

class 类名

{

  public:

    类名(形参列表);//构造函数原型

    其他成员

};

类名::类名(形参表)

{

  函数体

}

默认的构造函数:

若某个类定义中未给出显式的构造函数,则系统自动给出一个默认的构造函数:

    <类名> (void)

      {

      }

若类定义了构造函数,则系统不提供默认的构造函数,此时,若还想要一个无参数的构造函数,则需用户另行定义。

当构造函数的参数具有默认值时,称为具有缺省参数的构造函数。使用默认值时需注意:

1)只能出现在类定义的接口部分,而不能出现在类定义的实现部分。

2)所有具有默认值的参数必须处在参数表的最右边。

3)  在使用具有缺省参数的构造函数时,要防止二义性。

 1 class sample    
 2 
 3 { private:
 4 
 5   int x,y,z;
 6 
 7   public:
 8 
 9   sample();//类sample的构造函数
10 
11   sample(int i, int j, int k=10);  //构造函数的重载,默认值只能出现在此处定义部分,而不能出现在下面的实现部分(第19行),且由于k有默认值,i,j没有,故k必须                                                位于i,j右侧
12 
13 };
14 
15 sample:: sample()     
16 
17 {   x=1; y=2;z=5;  }
18 
19 sample:: sample(int i, int j, int k)  
20 
21 {   x=i;y=j;z=k; }
22 
23 void main()
24 
25 {  
26 
27      sample x(20,30,80);
28 
29      sample y;    //产生二义性
30 
31 }

 

2、析构函数

特征:

1)函数名为:~类名。

2)无函数返回类型说明且无参数,不能随意调用,没有重载。

3)完成对象撤销前的善后工作。

4)当对象退出其说明区域,或使用delete释放动态对象时,系统自动调用其析构函数。如果用户未定义析构函数,则系统会生成和调用一个默认的析构函数。

5)一个类只有一个析构函数,也可缺省。

6)对象被析构的顺序与其建立的顺序正好相反。

7)当在构造函数中用new运算符为类的数据成员动态分配内存时,则相应地在析构函数中必须用delete运算符释放该内存。

 

posted @ 2014-08-06 00:26  这一站幸福0519  阅读(271)  评论(0编辑  收藏  举报