如果您无法下载资料,请参考说明:
1、部分资料下载需要金币,请确保您的账户上有足够的金币
2、已购买过的文档,再次下载不重复扣费
3、资料包下载后请先用软件解压,在使用对应软件打开
第4章构造函数和析构函数4.1构造函数的定义4.2构造函数的重载4.3带默然参数的构造函数我们常常希望用一个已有对象来构造同一类型的另一对象,这可以通过调用一种特殊的构造函数——拷贝构造函数来实现。例如,已经有了一个date类的对象today,然后希望生成一个和它一样的对象workday,我们可用以下形式实现:datetoday(2001,8,11);dateworkday(today);在创建对象workday时,系统调用拷贝构造函数,将对象today的每个数据成员的值都复制到workday中,使两者具有同样的值。定义拷贝构造函数的一般形式如下:classclass_name{private:…public:class_name(class_name&ob_name);…}class_name::class_name(class_name&ob_name);{函数体}拷贝构造函数在三种情况下会被调用:①用类的一个对象去初始化该类的另一个对象时。②函数的形参是类的对象,调用函数进行形参和实参的结合时。③函数的返回值是类的对象,函数执行完返回调用者时。910一个对象失效时,要调用该对象所属类的析构函数。析构函数的功能是用来释放一个对象的。析构函数本身并不实际删除对象,而是进行系统放弃对象内存之前的清理工作,使内存可用来保存新的数据。它与构造函数的功能正好相反。析构函数通常用于对象退出生命期时,释放这个对象所占用的一些资源。例如,某个对象在运行程序过程中申请了一些内存空间,则需要在对象结束生命期前将这些空间释放;或者在打开了某个文件或数据库时,需要在对象退出生命期前关闭这些文件或数据库。4.6组合类构造函数其中,构造函数冒号后的部分a(i,j)、b(k)被称为成员初始化列表,该表列出了为初始化对象成员所使用的构造函数。当建立B类的对象时,对象成员a首先被建立。为构造该对象成员,所指定的构造函数(即A类对象的构造函数)被执行。B类对象的一般数据成员b也可用此方式初始化其值为k。distance类在其构造函数中初始化对象成员p1和p2,并计算这两点间的距离且存放在私有数据成员dist中,其值可通过该类的公有成员函数get_dist()得到。在主程序中,当声明distance类的对象myd时,其包含的对象成员p1和p2首先被建立。从程序运行结果可以看出,distance类的构造函数体被执行之前,point类的拷贝构造函数被调用4次,分别是两个point类对象myp1和myp2在distance类的构造函数进行函数参数形实结合和初始化对象成员时调用的。