书签 分享 收藏 举报 版权申诉 / 17
上传文档赚钱

类型c++之对象的初始化与销毁:构造函数与析构函数课件.ppt

  • 上传人(卖家):晟晟文业
  • 文档编号:4714928
  • 上传时间:2023-01-04
  • 格式:PPT
  • 页数:17
  • 大小:516KB
  • 【下载声明】
    1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
    2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
    3. 本页资料《c++之对象的初始化与销毁:构造函数与析构函数课件.ppt》由用户(晟晟文业)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
    4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
    5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
    配套讲稿:

    如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。

    特殊限制:

    部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。

    关 键  词:
    c+ 对象 初始化 销毁 构造 函数 课件
    资源描述:

    1、08:43:5008:43:50第四章第四章 对象的初始化与销毁:构造函数与析构函数对象的初始化与销毁:构造函数与析构函数本章主要内容:本章主要内容:1.1.构造函数、拷贝构造函数构造函数、拷贝构造函数 重点重点 2.2.构造函数的初始化列表构造函数的初始化列表 重点、难点重点、难点 3.3.析构函数析构函数 重点重点总体要求:总体要求:理解构造函数与析构函数的必要性与特殊性,掌握它们的理解构造函数与析构函数的必要性与特殊性,掌握它们的使用方法使用方法1ppt课件08:43:5008:43:501 1 对象的初始化对象的初始化 1.1.成员变量全部公有时的初始化成员变量全部公有时的初始化 类的

    2、成员变量都是公有的类的成员变量都是公有的,此时对该类对象的初始化可以此时对该类对象的初始化可以与与C C中对结构体变量的初始化一样中对结构体变量的初始化一样 class person class person public:public:char name15;char name15;intint age;age;address address addraddr;class address class address public:public:long long telenumtelenum;char addr30;char addr30;person p1=person p1=张三张三,2

    3、3,23,8911114,LanZhou University;8911114,LanZhou University;缺点:缺点:数据完全外露,没有实现信息隐藏数据完全外露,没有实现信息隐藏 实质是对象中成员变量的初始化实质是对象中成员变量的初始化,有有3 3种常见方法种常见方法2ppt课件08:43:5008:43:502.2.使用公有的成员函数完成对象的初始化使用公有的成员函数完成对象的初始化在类中提供公有的成员函数,对象通过调用这样的成员函在类中提供公有的成员函数,对象通过调用这样的成员函数对其内部的成员进行初始化数对其内部的成员进行初始化 例:银行帐户类例:银行帐户类 class Ac

    4、count class Account char sName32;char sName32;char sID20;char sID20;float float fBalancefBalance;public:public:void void Initialze(charInitialze(char *,char char*,float);,float);void void Account:InitializeAccount:Initialize(char char*name,charname,char *id,id,float amount)float amount)strcpy(sName,

    5、namestrcpy(sName,name););strcpy(sID,idstrcpy(sID,id););fBalancefBalance=amount;=amount;void main()void main()Account acc;Account acc;acc.Initializeacc.Initialize(张三张三,s9801,1000);,s9801,1000);缺点:缺点:客户程序员容易忘记调用这样的函数,对象的初始化得客户程序员容易忘记调用这样的函数,对象的初始化得不到保障不到保障3ppt课件08:43:5008:43:503.3.构造函数构造函数(constructor

    6、)(constructor)构造函数是类中特殊的成员函数,构造函数是类中特殊的成员函数,其函数名与类名相同其函数名与类名相同创建对象时系统创建对象时系统自动调用自动调用构造函数构造函数 创建对象的两种方法:创建对象的两种方法:.定义类类型的变量定义类类型的变量 .用用newnew运算符动态产生对象运算符动态产生对象 无论用那种方法,都会无论用那种方法,都会自动调用自动调用构造函数构造函数 不是由客户程序员人为调用不是由客户程序员人为调用,而是而是自动调用自动调用例例:.:.银行帐户类银行帐户类 .日期类日期类 把给成员变量赋初值的操作写在构造函数中把给成员变量赋初值的操作写在构造函数中,就能初

    7、始化就能初始化成员变量:对象一旦被创建成员变量:对象一旦被创建,马上调用构造函数马上调用构造函数,在能对对在能对对象进行其它操作之前象进行其它操作之前,对象的成员变量已具有确定的值对象的成员变量已具有确定的值4ppt课件08:43:5008:43:50构造函数的特殊性与必要性构造函数的特殊性与必要性函数名与类名相同函数名与类名相同在定义和声明时,不能说明构造函数的返回值类型,构造在定义和声明时,不能说明构造函数的返回值类型,构造函数根本不返回任何值函数根本不返回任何值一个类的构造函数可以有多个:一个类的构造函数可以有多个:构造函数允许重载构造函数允许重载,一个,一个构造函数对应一种创建对象的方

    8、法构造函数对应一种创建对象的方法构造函数可以带有形参,也可以不带形参,创建对象时构造函数可以带有形参,也可以不带形参,创建对象时自自动调用参数类型、数目均能匹配的一个动调用参数类型、数目均能匹配的一个。实参通过在创建。实参通过在创建对象时在对象名后的括号中传递给形参,若调用的是不带对象时在对象名后的括号中传递给形参,若调用的是不带参数的构造函数,则省略括号。无论带参与否,程序中都参数的构造函数,则省略括号。无论带参与否,程序中都不能通过对象名或对象指针显式调用构造函数不能通过对象名或对象指针显式调用构造函数 例:例:Date dtObj(2004,10,11);Date dtObj(2004,

    9、10,11);Date Date*pDtObjpDtObj=new Date(2004,10,12);=new Date(2004,10,12);Date Date dtObjDftdtObjDft;Date Date*pDtpDt=new Date;=new Date;5ppt课件08:43:5008:43:50构造函数的特殊性与必要性(续)构造函数的特殊性与必要性(续)类中未显式提供构造函数时类中未显式提供构造函数时,C+,C+会自动添加一个默认构造会自动添加一个默认构造函数函数,该构造函数不带有形参该构造函数不带有形参,且函数体为空且函数体为空,在后台起作用在后台起作用;若类中显式提供了

    10、构造函数若类中显式提供了构造函数,则不再添加默认构造函数则不再添加默认构造函数使用默认构造函数的情况下,若创建的对象是全局对象或使用默认构造函数的情况下,若创建的对象是全局对象或静态对象静态对象,则成员变量的值全部被置为相应类型的则成员变量的值全部被置为相应类型的0 0值,否值,否则成员变量的值不确定则成员变量的值不确定应尽可能提供自己的构造函数,而不使用默认的构造函数应尽可能提供自己的构造函数,而不使用默认的构造函数6ppt课件08:43:5008:43:502 2 拷贝构造函数拷贝构造函数(copy-constructor)(copy-constructor)一种特殊的构造函数一种特殊的构

    11、造函数创建对象时,用一个已经存在的对象对新创建的同类对象创建对象时,用一个已经存在的对象对新创建的同类对象进行初始化,此时要求构造函数的参数为自身类类型的引进行初始化,此时要求构造函数的参数为自身类类型的引用,这种构造函数称为用,这种构造函数称为拷贝构造函数拷贝构造函数拷贝构造函数的一般形式为拷贝构造函数的一般形式为 类名类名:类名类名(const(const 类名类名&引用名引用名,););一般情况下,多使用如下形式一般情况下,多使用如下形式 类名类名:类名类名(const(const 类名类名&引用名引用名););其中其中constconst是可选的是可选的例:拷贝构造函数例:拷贝构造函数

    12、class Aclass Apublic:public:A(int)coutA(int)cout A()A()endlendl;A(constA(const A&)coutA&)cout A(A&,intA(A&,int)endlendl;void void main()Amain()A a(1);A a(1);A b(a);Ab(a);A c=b;c=b;7ppt课件08:43:5008:43:50拷贝构造函数调用的时机拷贝构造函数调用的时机用已经存在的对象初始化新创建的对象时,调用拷贝构造用已经存在的对象初始化新创建的对象时,调用拷贝构造函数函数 例:例:LocationLocation类

    13、类对象做形参,调用函数时用实参对象初始化形参,调用拷对象做形参,调用函数时用实参对象初始化形参,调用拷贝构造函数贝构造函数void void f(Locationf(Location p)p)coutcoutFunctinFunctin:p.getXp.getX(),(),p.getYp.getY()()endlendl;推荐使用对象的引用做形参推荐使用对象的引用做形参,可降低函数调用过程中的开销可降低函数调用过程中的开销函数返回对象,此时要通过拷贝构造函数创建临时对象函数返回对象,此时要通过拷贝构造函数创建临时对象Location g()Location g()Location A(1,2)

    14、;return A;Location A(1,2);return A;8ppt课件08:43:5008:43:50浅拷贝与深拷贝浅拷贝与深拷贝类中未显式提供拷贝构造函数时,类中未显式提供拷贝构造函数时,C+C+会自动添加一个默认会自动添加一个默认拷贝构造函数,该拷贝构造函数完成位对位的拷贝,亦即拷贝构造函数,该拷贝构造函数完成位对位的拷贝,亦即将已存在对象中的每一位复制到新创建的对象中对应的位将已存在对象中的每一位复制到新创建的对象中对应的位(亦即亦即将已存在对象中的每个成员拷贝到新建对象中对应的将已存在对象中的每个成员拷贝到新建对象中对应的成员成员),此时称完成的拷贝是,此时称完成的拷贝是浅

    15、拷贝浅拷贝默认的拷贝构造函数在一般情况下可以很好地工作,但一默认的拷贝构造函数在一般情况下可以很好地工作,但一些特殊情况下些特殊情况下,仅使用默认的拷贝构造函数可能会引起问题,仅使用默认的拷贝构造函数可能会引起问题,此时必须提供自己的拷贝构造函数并按需要自己完成拷贝此时必须提供自己的拷贝构造函数并按需要自己完成拷贝工作才能解决问题,称这时完成的拷贝是工作才能解决问题,称这时完成的拷贝是深拷贝深拷贝例:内部包含指针成员变量的类例:内部包含指针成员变量的类 .浅拷贝浅拷贝 .深拷贝深拷贝例:自动记录本类对象数目的类例:自动记录本类对象数目的类 .浅拷贝浅拷贝 .深拷贝深拷贝9ppt课件08:43:

    16、5008:43:503 3 构造函数的初始化列表构造函数的初始化列表类的成员变量是类的成员变量是constconst的或是另外一个类的对象时,对其进的或是另外一个类的对象时,对其进行初始化,需要在定义构造函数时使用行初始化,需要在定义构造函数时使用初始化列表初始化列表初始化列表的一般形式初始化列表的一般形式 类名类名:类名类名(形参列表形参列表):成员变量名成员变量名1(1(初始值列表初始值列表),),成成 员变量名员变量名n(n(初始值列表)初始值列表)/*函数体函数体*/10ppt课件08:43:5008:43:50一一.const.const的成员变量的成员变量对简单类型的非静态成员变量

    17、初始化,既可以在构造函数对简单类型的非静态成员变量初始化,既可以在构造函数的函数体中对其赋值,也可以使用初始化列表的函数体中对其赋值,也可以使用初始化列表/Fred.cppFred.cppFred:Fred()Fred:Fred():size(0):size(0)x=0;x=0;Fred:Fred(intFred:Fred(int sz,intsz,int xx)xx):size(szsize(sz)x=xx;x=xx;void void Fred:PrintFred:Print()()coutcout size size next;-next;delete delete pWorkpWork

    18、;15ppt课件08:43:5008:43:50说明:说明:定义和声明析构函数时,不能说明析构函数的返回值类型,定义和声明析构函数时,不能说明析构函数的返回值类型,析构函数不返回任何值析构函数不返回任何值析构函数不带有任何参数,一个类只能有一个析构函数:析构函数不带有任何参数,一个类只能有一个析构函数:析构函数不能被重载析构函数不能被重载类中未显式提供析构函数时,编译器会自动添加一个析构类中未显式提供析构函数时,编译器会自动添加一个析构函数函数撤销对象时系统撤销对象时系统自动调用自动调用析构函数析构函数 撤销对象的两种情况:撤销对象的两种情况:1.1.对象的生存期结束对象的生存期结束 2.2.

    19、使用使用deletedelete运算符释放运算符释放newnew动态生成的对象动态生成的对象 两种情况下都会两种情况下都会自动调用自动调用对象的析构函数对象的析构函数析构函数不能由客户程序员显式调用析构函数不能由客户程序员显式调用16ppt课件08:43:5008:43:50本章总结本章总结各种对象的构造函数与析构函数的调用时机各种对象的构造函数与析构函数的调用时机.全局对象全局对象 程序流程进入程序流程进入main()main()函数之前按定义对象的顺序调用构造函数之前按定义对象的顺序调用构造函数函数,程序运行结束时按相反的顺序调用析构函数程序运行结束时按相反的顺序调用析构函数.局部对象局部

    20、对象 调用包含该局部对象的函数时按定义对象的顺序调用构造调用包含该局部对象的函数时按定义对象的顺序调用构造函数函数,生命期结束时调用析构函数生命期结束时调用析构函数;静态局部对象直到程序静态局部对象直到程序运行结束时调用析构函数。运行结束时调用析构函数。析构函数的调用顺序与构造函数的顺序正好相反析构函数的调用顺序与构造函数的顺序正好相反.成员对象成员对象 创建外围对象时使用初始化列表调用成员对象的构造函数创建外围对象时使用初始化列表调用成员对象的构造函数,且先调用成员对象的构造函数且先调用成员对象的构造函数,再执行外围对象的构造函再执行外围对象的构造函数体;外围对象撤销时调用成员对象的析构函数数体;外围对象撤销时调用成员对象的析构函数,但先执但先执行外围对象的析构函数体行外围对象的析构函数体,再调用成员对象的析构函数再调用成员对象的析构函数 析构函数的调用顺序与构造函数的调用顺序完全相反析构函数的调用顺序与构造函数的调用顺序完全相反17ppt课件

    展开阅读全文
    提示  163文库所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
    关于本文
    本文标题:c++之对象的初始化与销毁:构造函数与析构函数课件.ppt
    链接地址:https://www.163wenku.com/p-4714928.html

    Copyright@ 2017-2037 Www.163WenKu.Com  网站版权所有  |  资源地图   
    IPC备案号:蜀ICP备2021032737号  | 川公网安备 51099002000191号


    侵权投诉QQ:3464097650  资料上传QQ:3464097650
       


    【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。

    163文库