对象的构造与析构.pptVIP

  • 0
  • 0
  • 约2.72千字
  • 约 17页
  • 2023-03-17 发布于广东
  • 举报
第一页,共十七页,2022年,8月28日 一、对象构造与析构的作用 完成实验报告中的任务1、任务2,对照课本内容,理解构造函数、析构函数的调用方法与作用。 完成实验任务3,观察程序运行的输出结果,理解“复制”构造函数在函数调用中的作用。 第二页,共十七页,2022年,8月28日 二、动态内存分配程序设计 数组的定义:int a[10];只能说明长度不变的数组,而在实际应用中,我们希望数组的长度可以随时改变,或者由用户设定,这个要求可以通过“动态内存分配”技术实现。 动态内存分配:在程序运行过程中,根据需要在内存中进行内存分配,称为动态内存分配。 相关知识的学习:(预习方法:运行示例程序) 第三页,共十七页,2022年,8月28日 动态内存分配程序设计 程序使用的内存空间示意图: 栈区 堆区 全局数据区 程序代码区 栈区 函数形参、局部变量 在程序编译时分配 堆区 在程序运行过程中 分配的存储 全局数据区 程序代码区 第四页,共十七页,2022年,8月28日 C++堆内存分配:运算符 new 和 delete 1.new: 申请一个整型的空间: int *ip; ip=new int; *ip=10; 申请一个整型空间并同时初始化: ip=new int (5); cout*ipendl; 申请长度为10 的一维数组(数组的长度是可变的) int *ap; ap=new int[10];//注意:不能对动态数组初始化 for (int k=0;k10;k++) cinap[k]; 动态内存分配程序设计 从堆中分配一个整型存储空间,返回指向内存的指针。 从堆中分配一个整型存储空间并初始化为5 从堆中分配连续10个整型存储空间 第五页,共十七页,2022年,8月28日 动态内存分配程序设计 2.Delete: 把申请的堆内存空间还给系统: int *ip; ip=new int; *ip=10; delete ip; int *ap; ap=new int[10]; for (int k=0;k10;k++) cinap[k]; delete [ ]ap;//表示归还一组空间 第六页,共十七页,2022年,8月28日 例1:运用动态内存分配申请一个数组,长度从外部输入: int n,*ip,*tp; cinn; ip=new int[n]; for (int k=0;kn;k++) cinip[k];//下标法 //指针法:ip固定 for (k=0;kn;k++) *(ip+k)=2*(ip+k); //指针法:tp可变 for (tp=ip;tpip+n;tp++) *tp=2*tp; delete []ip; 思考题:这样的语句有什么问题? for (;ipip+n;ip++) *ip=2*ip; 动态内存分配程序设计 第七页,共十七页,2022年,8月28日 动态内存分配程序设计 例2:程序可接收一个不定长的字符串: void main(){ char *cp; int len; cout“请输入字符串的长度:”;cinlen; cp=new char[len+1]; cincp; coutcpendl; delete []cp; } 第八页,共十七页,2022年,8月28日 动态内存分配程序设计 例3:程序可接收一个不定长的字符串(带输入容错) “容错”就是当用户输入不正确时,程序能对错误进行处理,确保程序不会产生严重后果。 void main(){ char *cp; int len, count=3; //最多可允许三次输入错误 do { cout“请输入字符串的长度(0):”;cinlen; } while (count--0len0); if (count==0) exit(0); //中止程序运行 cp=new char[len+1]; cincp; coutcpendl; delete []cp; } 第九页,共十七页,2022年,8月28日 动态内存分配程序设计 实验任务4:编程实现可变长度的数组,并按要求设置断点,理解指针的运用。(把实验结果记录在作业本并提交) #include iostream.h void main() { int n,*ip,*tp; cinn; //输入所需数组的长度 ip=new int[n]; //此处设置断点观察ip的值, ip有什么意义? for (int k=0;kn;k++) cinip[k]; //在此处设置断点观察ip, k的变化 for (t

文档评论(0)

1亿VIP精品文档

相关文档