构造函数是一类特殊的类成员函数,在创建对象时调用,构造函数的名称和类名相同,但通过函数重载,可创建多个同名的构造函数,前提是每个函数的特征标(也就是参数列表)都不一样,而且,构造函数通常没有声明类型,因此,构造函数通常用于初始化类对象的成员,初始化应该与构造函数的参数列表匹配,举个例子:
Bozo(const char * fname, const char * lname);//constructor prototype ,假设一个Bozo类的构造函数原型
则可以使用它来创建初始化对象:
Bozo bozetta = Bozo("Bozetta", "Biggens");//primary form
Bozo fufu("FuFu", "0'Dweeb");//short form
Bozo *pc = new Bozo("Popo", "Le Peu");//dynamic object
如果编译器支持C++11,则可以使用列表初始化:
Bozo bozetta = {"Bozetta", "Biggens"};
Bozo fufu{"FuFu", "0'Dweeb"};
如果构造函数只有一个参数,则将对象初始化为一个参数的类型相同的值时,该构造函数将被调用,例如,假如有一个构造函数原型:
cout << trip;
则可以使用下面的任何一种形式来初始化对象:
Bozo dribble = bozo(4);//primary form
Bozo roon(66);//secondary form
Bozo tubby = 32;//special form for one-argument constructors
不过其实,这第三个式演示式新内容,在后面会详细介绍一种关闭这种特性的方式,因为它可能会造成一些不必要的麻烦。
(注意:接受一个参数的构造函数允许使用赋值语法将对象初始化为一个值)
默认构造函数式是没有参数的,因此如果创建对象时没有显式的初始化,则将调用默认构造函数,如果程序中没有提供任何构造函数,则编译器会为程序提供一个默认构造函数;否则,必须自己提供默认函数。
Bozo();
Bistro(const char * s = "Chez Zero");
如果构造函数使用了new,则必须提供使用delete的析构函数。