文档介绍:构造函数和析构函数
在OOP中,凡是实用程序创建的对象都需要作某种形式的初始化。为此,在C++的类说明中,引进了构造函数(constructor function),供创建类的实例时调用,并自动完成对象的初始化。析构函数(destructor function)则用于释放对象定义时通过构造函数向系统所申请的存储空间以及有关的系统资源。它是在对象离开其有效范围时自动调用。
[] 。EX4-
构造函数的特性
构造函数具有以下特性:
(1)、构造函数的名称与它所属的类名相同,且是无返回值类型(任何返回类型,包括void,都是非法的)。
(2)、一个类可以有一个以上的构造函数,重载构造函数参数个数或类型不一样。如果编程时在类中没有显式定义构造函数,慢编译器会为类自动生成一个缺省的构造函数(不带任何参数)。
(3)、构造函数是在以类去定义所属实例时,由编译器自动调用的。在C++中,执行某对象的说明时,调用了构造函数,创建了该对象。它不同于一般的变量说明语句。
(4)、构造函数与一般成员函数性质相同,同样要受到访问限制。一个定义于非public区的构造函数,则说明该类为私有类。
[] 私有类实例。
(5)、控制成员变量内存分配,为定义对象向系统申请内存。
(6)、构造函数不能用常规的调用方法,不可取它们的地址,不能被继承。
构造函数的设计和使用
首先讨论构造函数设计面临的问题是什么?解决问题的思路和原则是什么?
(1)、类中私有成员一般不作初始值设置,需要在定义对象时正确初始化,以确保对象的有效性。
(2)、采取显式调用成员函数进行对象初始化容易遗漏,造成对象无意义。因此使用构造函数进行对象初始化为最佳选择。
(3)一个类的不同对象需要有不同的初始化,因此采取两种方式解决此问题:参数化的构造函数和多构造函数。
下面分别进行具体的介绍。
1、带参数的构造函数
[] 具有带参数的构造函数的类的说明及使用。
一般情况下,构造函数往往使用缺省值,因为构造函数定义了缺省值,在函数调用时,若无特别指定参数,便可以缺省值作初始化。而且也可以防止遗漏初始赋值。
缺省参数的构造函数用法与一般函数用法相同。
[]
注意:编译器一般是严格按函数定义时的顺序来确定实参的位置。如果参数调用时的实参个数不足,编译器将优先匹配前面的形参,而不管它们是否有缺省值(参见函数一节)。
此外,当构造函数只有一个函数时,可采用以下形式来定义对象:
class_name obj_name=value;
2、多构造函数
对于一个类的不同对象,当其需要不同类型和不同个数的初始化参数时,可以在一个类中具有几个构造函数,以适应不同的情况。
[] 。
注意避免错误:所定义的多个构造函数之前,在参数个数或类型上必须有差异;在定义实例对象,调用多构造函数时,若使用缺省参数,特别要防止二义性。
2、复制构造函数(copy constructor)
复制构造函数是一种特殊的构造函数:
(1)、具有一般构造函数的功能