c++类中的构造函数和析构函数小析

来源:互联网 发布:applocale类似的软件 编辑:程序博客网 时间:2024/05/17 16:02
  构造函数和析构函数小析
一、构造函数

 构造函数的作用是类对象被创建的时候,编译系统为对象分配内存空间,并自动调用构造函数,为类成员完成初始化工作。构造函数是类的特殊成员函数,只要创建类类型的新对象,都要执行构造函数,为类成员完成初始化工作。
构造函数和类同名,但是没有返回类型,构造函数也有形参表和函数体,一个类可以有多个构造函数,每个构造函数必须有与其他构造函数不同数目或类型的形参。有一点很重要的就是,c++的类一定需要构造函数,如果没有为一个类显式定义任何构造函数,编译器将自动为这个类生成默认构造函数。

1 默认构造函数

默认构造函数是没有形参的构造函数,默认构造函数说明当定义对象却没有为它提供显式的初始化式时应该怎么办。默认构造函数可以在类中自己定义,也可以如上面所说,没有为一个类显式定义任何构造函数,编译器将自动为这个类生成默认构造函数。

2 构造函数的定义

和其他成员函数一样,构造函数也必须在类中声明,但是可以在类中或类外定义,构造函数是放在类的public部分。

这里附加下public、protected、private访问标号的访问范围。

public:可以被1.该类中的函数、2.子类的函数、3.其友元函数访问,也可以由4.该类的对象访问。

private:只能由1.该类中的函数、2.其友元函数访问。该类的对象也不能访问。

protected:可以被1.该类中的函数、2.子类的函数、以及3.其友元函数访问。但不能被该类的对象访问。

3 构造函数的初始化式

构造函数具有名字、形参表、和函数体。但是和其他函数不同的是,构造函数还可以包含一个构造函数初始化列表。构造函数初始化列表以一个冒号开始,接着是一个以逗号分隔的数据成员列表,每个数据成员后面跟一个放在圆括号中的初始化式。成员初始化的次序就是定义成员的次序。构造函数初始化式只在函数的定义中而不是声明中指定。省略的初始化列表并在构造函数的函数体内对数据成员赋值是合法的。在构造函数初始化列表中没有显式提及的每个成员,运行该类的默认构造函数,来初始化这些成员。构造函数中可以接受构造函数的形参作为初始化式。

没有默认构造函数的类类型的成员,以及const或引用类型的成员,都必须在构造函数初始化列表中进行初始化。

二、析构函数

析构函数也是一个特殊的成员函数,它的作用与构造函数相反,它的名字是类名的前面加一个“~”符号。当对象的生命周期结束时,会自动执行析构函数。
 
为什么需要析构函数呢?
构造函数的一个用途就是自动获取资源,在构造函数中分配了资源后,需要一个对应操作自动回收或释放资源,析构函数就是这样的应运而生了,它可以完成所需资源的回收。但是析构函数并不仅限于用来释放资源,一般而言,析构函数可以任意执行任意操作,该操作是类设计者希望在该类对象的使用完毕后之后执行的。
 
1 析构函数的特点
 
它的名字是类名的前面加一个“~”符号,析构函数也是一个特殊的成员函数,它没有返回值,没有形参,既然析构函数不能指定任何形参,所以析构函数不能重载。一个类可以定义多个构造函数,但只能提供一个析构函数,应用类的所有对象。析构函数的作用并不是删除对象,而是在撤销对象占用的内存之前完成一些清理工作,使这部分内存可以被程序分配给新对象使用。在一般情况下,调用析构函数的次序正好与调用构造函数的次序相反:最先被调用的构造函数,其对应的(同一对象中的)析构函数最后被调用,而最后被调用的构造函数,其对应的析构函数最先被调用。
 


这里只是简单介绍下构造函数和析构函数的含义,下一讲将会讲点构造函数和析构函数中一些复杂点的内容。



1 0
原创粉丝点击