- 1、本文档共59页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
通常情况下,析构函数无须定义,也无须调用,由系统自动产生,自动调用。 但在构造函数或程序的执行过程中,用new运算符为对象的指针成员申请了空间动态时,由于动态空间是无法自动释放的,在类中必须显式定义析构函数,并在析构函数中使用delete运算符收回为指针成员所分配的存储空间。 6.4.2 析构函数的使用 class String{ char *str;public: String(char *p){ if(p){ str=(char *)new char[strlen(p)+1]; strcpy(str,p); } else str=0; } void print(){ coutstr‘\n’; } ~String(){ if(str)delete[ ]str;} //A}; void main(){ String pp(“VC++程序设计”); pp.print();} 程序解读: 能否省略A行的“[ ] ”? 6.4.2 析构函数的使用 例6-10 在析构函数中释放动态空间。 class Obj{ int val;public:Obj(){ Obj(int i){val=i;coutval‘\t’“构造1!\n”;} ~Obj(){cout“析构1!\n”;}}; class Con{int data; Obj one,two;public: Con(int i,int j,int k): one(k),two(i+j) { data=i; coutdata‘\t’“构造2!\n”;} ~Con(){cout“析构2!\n;}}; void main(void){Con c(100,200,400); } 程序运行结果: 400 构造1!300 构造1!100 构造2!析构2!析构1!析构1! 构造函数根据产生对象的顺序依次调用,析构函数的调用顺序通常与构造函数相反。 6.4.2 析构函数的使用 例6-11 构造函数与析构函数的调用顺序。 建立对象时调用构造函数,撤消对象时调用析构函数。不同存储类型的对象,其产生和释放情况是不一样的,调用构造函数和析构函数情况也就不同,如表7-1所示。 表7-1构造函数和析构函数的调用时间 对象类型 构造函数调用 析构函数调用 全局对象 程序运行 程序结束 局部对象 对象定义处 离开块 静态局部对象 第一次执行对象定义处 程序结束 new创建的动态对象 创建对象处 delete显式撤消 6.4.3 调用构造函数及析构函数 class Point{ int x,y;public: Point(){ x=0;y=0; cout” 全局!\t”;} Point(int a){x=a;y=0;cout” 局部!\t”;} Point(int a,int b){x=a;y=b;cout” 动态!\t”;} Point(int a,int b,int c){x=a+b;y=c; cout” 静态!\n”;} ~Point(){coutx’\t’y’\t’” 析构函数!\n”;}}P1;Point P2;void main(){ Point P3(1),*P4; P4=new Point(2,4); for(int i=0;i5;i++) static Point P5(4,6,9); delete P4; cout主函数结束!endl;} 程序运行结果: 全局! 全局! 局部! 动态! 静态!2 4 析构函数!主函数结束! 1 0 析构函数!10 9 析构函数!0 0 析构函数!0 0 析构函数! 6.4.3 调用构造函数及析构函数 例6-12 不同类型对象构造函数和析构函数的调用 类的定义——怎样定义一个类; 构造函数——怎样初始化对象,给数据成员赋值,包括: 数据成员是普通变量时,直接赋值:数据成员=形参; 数据成员是一维数组时,用循环语句逐个元素赋值; 数据成员是二维数组时,用嵌套的循环语句逐个元素赋值; 数据成员是字符数组时,用字符串拷贝函数赋值; 数据成员是指针变量时,先为其分配动态空间,再根据动态空间的形态对动态空间赋值;不能直接对指针变量赋值。 当用已有对象初始化新建对象时,应用拷贝功能构造函数. 析构函数——释放对象空间,特别是数据成员申请了动态空间时,要用delete收回动态空间。 课堂小结 本章介绍了面向对象编程的基本概念和方法,重点: 测试函数——用定义的类说明对象,用对象调用成员函数完成测试。注意: 说明对象的参数要与构造函数的参数一致; 调用方式
您可能关注的文档
- 高考生物一轮复习 第一单元 第4讲 免疫调节课件 新人教版必修3.ppt
- 高中物理 4.7 用牛顿运动定律解决问题(二)课件 新人教版必修1.ppt
- ASCO乳腺癌重要研究——济南.pptx
- 高三生物一轮复习课件:必修3-第1单元-第4讲 免疫调节.ppt
- 当前流行的猪病现状及防治措施.ppt
- 成龙律师事务所行政处罚法培训二版.ppt
- 高三生物一轮复习--可遗传的变异和育种-1-基因突变、基因重组、染色体变异课件-苏教版.ppt
- 【公共营养师】第五节维生素正式.ppt
- 高中生物新人教版必修1课件 第6章 第1节 第1课时 细胞周期和有丝分裂过程.ppt
- 用牛顿运动定律解决实际问题.ppt
- 高端制造行业策略报告:成熟制造扬帆出海,创新引擎加速国产替代——全球价值链重构下的结构性机遇.pptx
- 化工行业年度策略深度剖析:跨越行业低点,精准把握复苏契机,拥抱确定性周期成长机遇.pptx
- 钢铁行业策略:供需矛盾与结构升级交织,以韧性增长行稳致远.pptx
- 煤炭行业策略深度剖析:煤价回调蓄势待发,旺季需求释放可期,精准布局投资先机.pptx
- 高三第一学期语文第一次学情检测试卷.docx
- 2024-2025高二下学期名校考试题【文言文阅读】精选一.docx
- 2024-2025学年度高一下学期试题【信息类文本阅读】精选一.docx
- 2024-2025学年度高一下学期试题【语言文字运用】精选一.docx
- 2024-2025高二下学期名校考试题【文学类文本阅读】精选一.docx
- 【小说阅读】2025届高三下4月名校模考试题精选.docx
最近下载
- GB∕T38305-2019头部防护救援头盔..pdf
- 2024届湖南省张家界市慈利县高一物理第二学期期末达标检测模拟试题含解析.doc VIP
- 通信铁塔标准图集(V1.0).pdf VIP
- 选矿试验技术方法 第5部分:浮选.docx VIP
- 《选矿试验技术方法第4部分:磁选》.pdf VIP
- 上市公司董事会秘书工作手册-信息披露政策法规汇编(通用) 20240627.pdf VIP
- 高标准农田设计实施方案(技术标340页).doc VIP
- 1688店铺运营计划方案.pdf VIP
- 《医学伦理学》教案 第四章 医学伦理学的规范体系.pdf VIP
- 《选矿试验技术方法 第1部分:破碎筛分》.pdf VIP
文档评论(0)