版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第6章构造函数与析构函数第6章构造函数与析构函数1【本章学习要点】1.掌握构造函数与析构函数的定义与使用;2.加深对类和对象概念及运用的理解与掌握。【本章学习要点】1.掌握构造函数与析构函数的定义与使用;2第6章构造函数与析构函数6.1构造函数与析构函数的作用
6.2构造函数
6.3析构函数
第6章构造函数与析构函数6.1构造函数与析构函数的3构造函数(constructor)是一种特殊的成员函数,其主要作用就是在对象被创建时利用初始值去构造对象,使得在声明对象时就能自动地完成对象的初始化。6.1构造函数与析构函数的作用6.1构造函数与析构函数的作用4析构函数(destructor)也是一种特殊的成员函数,它是在对象的生存期即将结束时由系统自动调用的。析构函数的作用与构造函数相反,用来在对象被删除前做一些清理工作和数据保存工作。与构造函数相对应,析构函数(destructor)用于撤消一个对象。析构函数(destructor)也是一种特殊的成员函5构造函数是与类同名的成员函数,是一个特殊的类的成员函数,构造函数除了具备一般成员函数的特点之外,还有以下特性:1.构造函数是与类同名的成员函数。2.构造函数没有返回值类型和返回值,可以有任意类型的参数。3.在构造函数中初始化类的数据成员。
6.2构造函数构造函数是与类同名的成员函数,是一个特殊的类的成员函66.2.1构造函数的重载与对象的构造构造函数的重载
所谓函数重载(functionoverload),是指不同功能代码的函数可以共用一个函数名。特别是构造函数的重载给程序设计带来了很大的灵活性。当想用几种不同的方法构建对象时,可以重载构造函数,为对象提供多种初始化方式。
6.2.1构造函数的重载与对象的构造7【例6.1】构造函数的重载#include<iostream.h>classBox{private:intheight,width,depth; public : Box(){height=0;width=0;depth=0;}//避免给成员变量赋不安全的值Box(intht,intwd,intdp)//重载构造函数{height=ht;width=wd;depth=dp;}intvolume(){returnheight*width*depth;}};voidmain(){Boxbox1; //调用不带参数的构造函数Boxbox2(10,15,20); //调用带参数的构造函数Cout<<”Volume1=”<<box1.Volume()<<”,Volume2=”<<box2.Volume()<<endl;}【例6.1】构造函数的重载82.对象的构造【例6.2】为类Time建立构造函数Time()和析构函数~Time()。#include<iostream.h>classTime{private:inthour;intminute;intsecond;public:Time(int,int,int); //构造函数~Time(); //析构函数};Time::Time(inth,intm,ints){hour=h;minute=m;second=s;cout<<”Theconstructorbecalled:”<<hour<<’:’minute’:’<<second<<endl;}2.对象的构造9Time::~Time(){cout<<”Theconstructorbecalled:”<<hour<<’:’minute’:’<<second<<endl;}voidmain(void){Timet1(10,35,55); //声明对象t1,自动调用构造函数Timet2(16,53,9); //声明对象t2,自动调用构造函数} //退出主函数时自动调用对象t2、t1的析构函数Time::~Time()106.2.2默认构造函数不需要提供参数的构造函数叫作默认构造函数,它或者带有一个空参数列表,或者它的全部参数都有默认值。初始化类对象时,默认构造函数具有特殊的意义。6.2.2默认构造函数11【例6.3】类Time的使用,声明对象并设置对象属性。voidmain(){TimeEndTime; //声明对象EndTimeEndTime.setTime(12,23,36); //设置对象EndTime的时间(属性,数据成员)Cout<<”Theendtimeis:”; EndTime.showTime(); //显示对象EndTime的时间}【例6.3】类Time的使用,声明对象并设置对象属性。126.2.3拷贝构造函数拷贝构造函数是一种特殊的构造函数,它的形式参数就是本类对象的引用,它使用一个已经存在的对象去初始化另一个同类对象。因为该函数也是一个构造函数,所以其函数名与类名相同,并且该函数也没有返回值类型和返回值。该函数的唯一参数就是同类对象的引用。
6.2.3拷贝构造函数13【例6.4】下面的程序实现了拷贝构造函数的功能。#include<iostream.h>classTime{private:inthour;intminute;intsecond;public:Time(intnum=1,inth=0,intm=0,ints=0);//带有缺省参数的构造函数Time(Time&temp); //拷贝构造函数~Time(); //析构函数};Time::Time(inth,intm,ints)【例6.4】下面的程序实现了拷贝构造函数的功能。14{hour=h;minute=m;second=s;cout<<”Theconstructorbecalled:”<<hour<<’:’minute’:’<<second<<endl;}Time::~Time(){cout<<”Theconstructorbecalled:”<<hour<<’:’minute’:’<<second<<endl;}voidmain(void){Timet1(10,35,55); //声明对象t1,自动调用构造函数Timet2(16,53,9); //声明对象t2,自动调用构造函数} //退出主函数时自动调用对象t2、t1的析构函数
{156.2.4成员初始化参数表用构造函数初始化对象的子元素时要使用一种特殊的语法。结构和类的构造函数初始化式(constructorinitializer)位于构造函数的参数表之后,函数体代码之前,由一个冒号和由逗号分隔的若干列表项构成。每一个构造函数初始化列表项都由数据成员标识符和其后的括号内的表达式构成。每个独立的成员都必须按如下形式初始化:成员名<表达式>
6.2.4成员初始化参数表16析构函数(destructor)也是一种特殊的成员函数,其名称同类名,并在前面加“~”字符,以区别构造函数。它执行与构造函数相反的操作,通常用于撤销对象时进行的一些清理任务。析构函数的说明格式为:<类名>::~<类名>();6.3析构函数
析构函数(destructor)也是一种特殊的成员函17定义析构函数时应注意:1.析构函数名与类名相同,只是它的前边须冠以波浪号“~”,以与构造函数区别开来。2.析构函数不得带有任何参数,即其参数表必须为空,即使关键字void也不允许有。因此,析构函数不得重载。3.析构函数不得返回任何值。4.在析构函数中不得调用C++的库函数exit()。如果必须在析构函数中终止整个程序的运行,则应调用库函数abort()。定义析构函数时应注意:18【复习与提示】1.构造函数是能够创建类的对象。创建过程包括初始化数据成员和不断使用new在堆中分配存储空间。析构函数是用于结束或销毁类的对象。结束对象包括回收分配给对象的资源,回收工作频繁地使用delete对已经分配给对象的存储空间进行回收。2.构造函数能够重载并且可以传递参数,但析构函数不能。在定义中用到相关类型时,使用传值调用为函数传递参数值时,或是当函数返回值必须创建一个相关类型的值时,将调用构造函数,当一个对象超出作用域范围,将隐含调用析构函数。构造函数和析构函数不能有返回类型,并且不能使用return表达式这样的语句。【复习与提示】19第6章构造函数与析构函数第6章构造函数与析构函数20【本章学习要点】1.掌握构造函数与析构函数的定义与使用;2.加深对类和对象概念及运用的理解与掌握。【本章学习要点】1.掌握构造函数与析构函数的定义与使用;21第6章构造函数与析构函数6.1构造函数与析构函数的作用
6.2构造函数
6.3析构函数
第6章构造函数与析构函数6.1构造函数与析构函数的22构造函数(constructor)是一种特殊的成员函数,其主要作用就是在对象被创建时利用初始值去构造对象,使得在声明对象时就能自动地完成对象的初始化。6.1构造函数与析构函数的作用6.1构造函数与析构函数的作用23析构函数(destructor)也是一种特殊的成员函数,它是在对象的生存期即将结束时由系统自动调用的。析构函数的作用与构造函数相反,用来在对象被删除前做一些清理工作和数据保存工作。与构造函数相对应,析构函数(destructor)用于撤消一个对象。析构函数(destructor)也是一种特殊的成员函24构造函数是与类同名的成员函数,是一个特殊的类的成员函数,构造函数除了具备一般成员函数的特点之外,还有以下特性:1.构造函数是与类同名的成员函数。2.构造函数没有返回值类型和返回值,可以有任意类型的参数。3.在构造函数中初始化类的数据成员。
6.2构造函数构造函数是与类同名的成员函数,是一个特殊的类的成员函256.2.1构造函数的重载与对象的构造构造函数的重载
所谓函数重载(functionoverload),是指不同功能代码的函数可以共用一个函数名。特别是构造函数的重载给程序设计带来了很大的灵活性。当想用几种不同的方法构建对象时,可以重载构造函数,为对象提供多种初始化方式。
6.2.1构造函数的重载与对象的构造26【例6.1】构造函数的重载#include<iostream.h>classBox{private:intheight,width,depth; public : Box(){height=0;width=0;depth=0;}//避免给成员变量赋不安全的值Box(intht,intwd,intdp)//重载构造函数{height=ht;width=wd;depth=dp;}intvolume(){returnheight*width*depth;}};voidmain(){Boxbox1; //调用不带参数的构造函数Boxbox2(10,15,20); //调用带参数的构造函数Cout<<”Volume1=”<<box1.Volume()<<”,Volume2=”<<box2.Volume()<<endl;}【例6.1】构造函数的重载272.对象的构造【例6.2】为类Time建立构造函数Time()和析构函数~Time()。#include<iostream.h>classTime{private:inthour;intminute;intsecond;public:Time(int,int,int); //构造函数~Time(); //析构函数};Time::Time(inth,intm,ints){hour=h;minute=m;second=s;cout<<”Theconstructorbecalled:”<<hour<<’:’minute’:’<<second<<endl;}2.对象的构造28Time::~Time(){cout<<”Theconstructorbecalled:”<<hour<<’:’minute’:’<<second<<endl;}voidmain(void){Timet1(10,35,55); //声明对象t1,自动调用构造函数Timet2(16,53,9); //声明对象t2,自动调用构造函数} //退出主函数时自动调用对象t2、t1的析构函数Time::~Time()296.2.2默认构造函数不需要提供参数的构造函数叫作默认构造函数,它或者带有一个空参数列表,或者它的全部参数都有默认值。初始化类对象时,默认构造函数具有特殊的意义。6.2.2默认构造函数30【例6.3】类Time的使用,声明对象并设置对象属性。voidmain(){TimeEndTime; //声明对象EndTimeEndTime.setTime(12,23,36); //设置对象EndTime的时间(属性,数据成员)Cout<<”Theendtimeis:”; EndTime.showTime(); //显示对象EndTime的时间}【例6.3】类Time的使用,声明对象并设置对象属性。316.2.3拷贝构造函数拷贝构造函数是一种特殊的构造函数,它的形式参数就是本类对象的引用,它使用一个已经存在的对象去初始化另一个同类对象。因为该函数也是一个构造函数,所以其函数名与类名相同,并且该函数也没有返回值类型和返回值。该函数的唯一参数就是同类对象的引用。
6.2.3拷贝构造函数32【例6.4】下面的程序实现了拷贝构造函数的功能。#include<iostream.h>classTime{private:inthour;intminute;intsecond;public:Time(intnum=1,inth=0,intm=0,ints=0);//带有缺省参数的构造函数Time(Time&temp); //拷贝构造函数~Time(); //析构函数};Time::Time(inth,intm,ints)【例6.4】下面的程序实现了拷贝构造函数的功能。33{hour=h;minute=m;second=s;cout<<”Theconstructorbecalled:”<<hour<<’:’minute’:’<<second<<endl;}Time::~Time(){cout<<”Theconstructorbecalled:”<<hour<<’:’minute’:’<<second<<endl;}voidmain(void){Timet1(10,35,55); //声明对象t1,自动调用构造函数Timet2(16,53,9); //声明对象t2,自动调用构造函数} //退出主函数时自动调用对象t2、t1的析构函数
{346.2.4成员初始化参数表用构造函数初始化对象的子元素时要使用一种特殊的语法。结构和类的构造函数初始化式(constructorinitializer)位于构造函数的参数表之后,函数体代码之前,由一个冒号和由逗号分隔的若干列表项构成。每一个构造函数初始化列表项都由数据成
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025买卖合同纠纷货款确定
- 房屋租赁合同简单模板2024
- 2025年业务发展劳务雇佣合同范文(2篇)
- 2025年个人业务承包合同范文(2篇)
- 2025公司拓展培训合同范本
- 2025公司债券担保合同范本
- 2025年专业版的店铺转让合同范文(2篇)
- 橡胶废粉运输合同
- 办公室装修终止合同声明
- 文化创意融资居间合同
- 消防产品目录(2025年修订本)
- 地方性分异规律下的植被演替课件高三地理二轮专题复习
- 光伏项目风险控制与安全方案
- 9.2提高防护能力教学设计 2024-2025学年统编版道德与法治七年级上册
- 催收培训制度
- ISO 22003-1:2022《食品安全-第 1 部分:食品安全管理体系 审核与认证机构要求》中文版(机翻)
- 2024年广东省高考地理真题(解析版)
- 2024高考物理广东卷押题模拟含解析
- 人教版五年级上册数学简便计算大全600题及答案
- GB/T 15945-1995电能质量电力系统频率允许偏差
- GB 32311-2015水电解制氢系统能效限定值及能效等级
评论
0/150
提交评论