1.基本概念
构造函数:一个类的构造函数的名字与类名是相同的。与一般函数类似,构造函数可以被重载。一个类通常都会有一个无实参的构造函数,这样的构造函数称为无实参构造函数。一个类的声明中可以不包含构造函数的声明。在这种情况下,相当于在类中隐含地声明了一个无实参的空构造函数。
析构函数:析构函数是与构造函数相对的。当创建一个对象时,其构造函数被调用,而对象销毁时,析构函数被调用。如果程序员没有显式定义析构函数,那么编译器为每个类定义一个默认的析构函数。析构函数和构造函数一样,但需要在前面加上一个代字符(~)。
注意点:
1)构造函数和析构函数的名字必须与类名相同,虚构函数前面有符号~。
2)构造函数和析构函数没有返回类型,包括void。
3)在创建对象时,构造函数被调用,它的作用就是初始化对象;在对象销毁时,析构函数被调用,它的作用主要是释放内存,避免内存泄露。
2.构造函数初始化列表
在构造函数中,可以使用初始化列表初始化数据域,语法如下:
ClassName(parameterList)
:datafield1(value1),datafield2(value2) //initializelist
{
// Additionalstatements if needed
}
初始化列表中将datafield1初始化为value1,datafield2初始化为value2。
如果一个数据域是对象类型,无实参构造函数会被自动调用,以创建该数据域的对象。如果没有无实参构造函数,编译器会报告一个错误。为了修正这个错误,必须使用构造函数初始化列表,这样数据域就会在构造函数的初始化列表中被初始化。
3.拷贝构造函数
每个类可以定义若干构造函数和一个析构函数。另外,每个类还可以有一个拷贝构造函数。拷贝构造函数的签名如下:
ClassName(ClassName &)
拷贝构造函数可用来创建一个对象,并用另一个对象的数据初始化新建对象。默认的拷贝构造函数简单地将参数对象的每个数据域复制给新建对象中相应的副本。这种拷贝方式称为浅拷贝,即如果数据域是一个指向其他对象的指针,那么简单地复制指针保存的地址值,而不是复制指向的对象的内容。