C++之构造函数与析构函数

来源:互联网 发布:mac里的照片怎么导出 编辑:程序博客网 时间:2024/06/06 17:11

C++中重要的是类的构造,对一个事物抽象,得到其本质的东西(所谓本质,放之四海而皆准)。类也无非对一些数据与函数的封装。对于类中的构造函数、析构函数有其固有的特点。 

故总结如下:

构造函数和析构函数是在类体中说明的两种特殊的成员函数。构造函数是在创建对象时,使用给定的值来将对象初始化。

析构函数的功能正好相反,是在系统释放对象前,对对象做一些善后工作。

对构造函数,说明以下几点:

构造函数是一种特殊的成员函数,与其他成员函数不同,不需要用户来调用它,而是在建立对象时自动执行。构造函数的名字必须与类名同名,而不能由用户任意命名,以便编译系统能识别它并把它作为构造函数处理。它不具有任何类型,不返回任何值。构造函数的功能是由用户定义的,用户根据初始化的要求设计函数体和函数参数。

1.  构造函数的函数名必须与类名相同。构造函数的主要作用是完成初始化对象的数据成员以及其它的初始化工作。      构造函数不需要用户调用,也不能被用户调用。构造函数是在建立对象时由系统自动执行的,而且只执行一次。

2. 在定义构造函数时,不能指定函数返回值的类型,也不能指定为void类型。

3. 一个类可以定义若干个构造函数。当定义多个构造函数时,必须满足函数重载的原则。

重载函数是函数的一种特殊情况,为方便使用,C++允许在同一范围中声明几个功能类似的同名函数,但是这些      同名函数的形式参数(指参数的个数、类型或者顺序)必须不同。(下面两个即是重载,可方便不同对象的初始      化)

4.构造函数可以指定参数的缺省值。

5.若定义的类要说明该类的对象时,构造函数必须是公有的成员函数。如果定义的类仅用于派生其它类时,则可将      构造函数定义为保护的成员函数。

6.没有定义构造函数时,缺省的构造函数并不对所产生对象的数据成员赋初值;即新产生对象的数据成员的值是不      确定的。

7.不存在没有构造函数的对象!

8.产生对象时,系统必定要调用构造函数。所以任一对象的构造函数必须唯一。(此处的唯一不是指只有一个构造      函数,意思是只能调用一个)


初始化方式:

1、,对于这样的构造函数,直接这样定义对象,即自动调用的该构造函数。


2、当用户希望对不同的对象赋予不同的初值时可这样:

,只是此处y的值可缺省(默认)。也即结果为20.0  10和3.0   7.0。(声明构造函数时可省略形参名)(可以有缺省参数的成员函数,若形参不完全缺省,则必须从形参的右边开始缺省。


3、也可利用参数初始化列表的形式,声明时用:前面的即可(不用类名限制)。其中num,name,score是要初始化的参数。这种写法方便、简练,尤其当需要初始化的数据成员较多时更显其优越性。甚至可以直接在类体中(而不是在类外)定义构造函数。

 

析构函数是一个特殊的成员函数,函数名必须与类名相同,并在其前面加上字符“~”,以便和构造函数名相区别。析构函数不能带有任何参数,不能有返回值,不指定函数类型。一个类中,只能定义一个析构函数,析构函数不允许重载。析构函数是在撤消对象时由系统自动调用的。析构函数的作用并不是删除对象,而是在撤销对象占用的内存之前完成一些清理工作,使这部分内存可以被程序分配给新对象使用。程序设计者事先设计好析构函数,以完成所需的功能,只要对象的生命期结束,程序就自动执行析构函数来完成这些工作。任何对象都必须有构造函数和析构函数。

如果在一个函数中定义了一个对象(它是自动局部对象),当这个函数被调用结束时,对象应该释放,在对象释放前自动执行析构函数。(注意不是对象使用完了就立即释放)

调用构造函数和析构函数的顺序:先构造的后析构,后构造的先析构。相当于栈。

0 0
原创粉丝点击