【1】构造函数的命名方式
构造函数的名字必须与类名同名,而不能由用户任意命
名,以便编译系统能识别它并把它作为构造函数处
理。
【2】有关构造函数的使用,有以下说明:
(1) 在类对象进入其作用域时调用构造函数。
(2) 构造函数没有返回值,因此也不需要在定义构
造函数时声明类型,这是它和一般函数的一个重要
的不同之点。
(3) 构造函数不需用户调用,也不能被用户调用。
(4) 在构造函数的函数体中不仅可以对数据成员赋
初值,而且可以包含其他语句。但是一般不提倡在
构造函数中加入与初始化无关的内容,以保持程序
的清晰。
(5) 如果用户自己没有定义构造函数,则C++
会自动生成一个构造函数,只是这个构造函数的函
数体是空的,也没有参数,不执行初始化操作。
【3】(1) 带参数的构造函数中的形参,其对应的实参
在定义对象时给定。
(2) 用这种方法可以方便地实现对不同的对象进
行不同的初始化。
#include<iostream> using namespace std; class Box { public: Box(int ,int ,int ); int volume(); private: int height; int width; int length; }; Box::Box(int h,int w,int len) { height = h; width = w; length = len; } int Box::volume() { return (height*width*length); } int main() { Box box1(12,25,50); cout<<"The volume of box is"<<box1.volume()<<endl; Box box2(13,43,23); cout<<"The volume of box is"<<box2.volume()<<endl; return 0; }
【4】 用参数初始化表对数据成员初始化C++还提供另一种
初始化数据成员的方法————参数初始化表来实现对
数据成员的初始化。这种方法不在函数体内对数据成员初始化,而是在函数首部实现。例如例
定义构造函数可以改用以下形式:
Box Box(int h,int w,int len):height(h) width(w) length(len){ }
这种写法方便、简练,尤其当需要初始化的数据成
员较多时更显其优越性。甚至可以直接在类体中(而不是在类外)定义构造函数
【5】构造函数的重载
在一个类中可以定义多个构造函数,以便对类对象
提供不同的初始化的方法,供用户选用。这些构造
函数具有相同的名字,而参数的个数或参数的类型
不相同。这称为构造函数的重载。
#include<iostream> using namespace std; class Box { public: Box();//声明一个无参数的构造函数 Box(int h,int w,int len):height(h),width(w),length(len){}//声明一个有参数的构造函数 int volume(); private: int height; int width; int length; }; Box::Box() { height = 10; width = 10; length = 10; } int Box::volume() { return (height*width*length); } int main() { Box box1; cout<<"The volume of box1 is"<<box1.volume()<<endl; Box box2(15,30,25); cout<<"The volume of box2 is"<<box2.volume()<<endl; return 0; return 0; }
(1) 调用构造函数时不必给出实参的构造函数,称
为默认构造函数(default constructor)
显然,无参的构造函数属于默认构造函数。一个类只能有一个
默认构造函数。
(2) 如果在建立对象时选用的是无参构造函数,应
注意正确书写定义对象的语句。
(3) 尽管在一个类中可以包含多个构造函数,但是
对于每一个对象来说,建立对象时只执行其中一个
构造函数,并非每个构造函数都被执行。