第--章━━动态内存分配优秀文档.ppt
上传人:天马****23 上传时间:2024-09-10 格式:PPT 页数:31 大小:151KB 金币:10 举报 版权申诉
预览加载中,请您耐心等待几秒...

第--章━━动态内存分配优秀文档.ppt

第--章━━动态内存分配优秀文档.ppt

预览

免费试读已结束,剩余 21 页请下载文档后查看

10 金币

下载此文档

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

C++程序设计主要内容C++的四个内存区域动态存储分配堆内存new与delete运算符new与delete运算符②动态分配的变量或对象没有名字,对其访问只能通过指针来间接进行,称无名变量或对象,其生存期不依赖于建立它的作用域。for(inti=0;i<last;i++)slist[i]=a.功能:释放由new运算动态创建的二维数组。①new运算符动态创建对象时,首先在堆区为该对象分配一块存储空间,然后自动调用相应的构造函数来初始化其成员数据,并返回该对象的起始地址。ps){ps=newchar[strlen(ms.for(i=0;i<2;i++)赋值之后,顺序表c中元素为:inti,j;show();cout<<“s2=”;s2.mystring(mystring&ms)//自定义拷贝构造函数{cout<<“学号=”<<id<<“\t姓名=”<<name<<“\t成绩=”<<score<<‘\n’;}cout<<“赋值之后,顺序表c中元素为:\n”;c.cout<<endl;}new与delete运算符【例】(动态创建二维数组)#include<iostream.h>voidmain(){float(*p1)[3]=newfloat[2][3];inti,j;cout<<“请输入六个整数:”;for(i=0;i<2;i++)for(j=0;j<3;j++)cin>>p1[i][j];for(i=0;i<2;i++){for(j=0;j<3;j++)cout<<*(*(p1+i)+j)<<‘\t’;cout<<endl;}float*p2=(float*)newfloat[2][3];cout<<“请输入六个整数:”;for(i=0;i<6;i++)cin>>p2[i];for(i=0;i<6;i++){cout<<*(p2+i)<<‘\t’;if((i+1)%3==0)cout<<endl;}delete[]p1;delete[]p2;}动态存储分配的几点说明动态存储分配的几点说明使用new和delete的几点说明动态创建对象【例】(学生类、new创建动态对象,delete释放动态对象)#include<iostream.h>#include<string.h>classStudent{intid;charname[8];intscore;public:Student(inti=0,char*na=0,ints=0){id=i;strcpy(name,na);score=s;cout<<“对象地址=”<<(int)this<<“\t构造(”<<name<<“)了!\n”;}~Student(){cout<<“对象地址=”<<(int)this<<“\t析构(”<<name<<“)了!\n”;}voidprint(){cout<<“学号=”<<id<<“\t姓名=”<<name<<“\t成绩=”<<score<<‘\n’;}};Student*p1=newStudent(111,“张军”,99);voidmain(){p1->print();deletep1;Student*p2=newStudent(222,“王红”,88);p2->print();//注意:此处漏写deletep2;}【例】(点类、new创建动态对象数组,delete释放动态对象数组)#include<iostream.h>#include<math.h>classPoint{floatx,y;public:Point(floata=0,floatb=0){x=a;y=b;cout<<“对象地址=”<<(int)this<<“\t调用构造了!\n”;}~Point(){cout<<“对象地址=”<<(int)this<<“\t调用析构了!\n”;}voidinput(){cout<<“输入点坐标(x,y)=”;cin>>x>>y;}voidprint(){cout<<“点(”<<x<<“,”<<y<<“)”;}floatcalculate(Point&p){returnsqrt((x-p.x)*(x-p.x)+(y-p.y)*(y-p.y));}};voidmain(){Point*p=newPoint[3];inti,j;for(i=0;i<3;i++)(p+i)->input();for(i=0;i<2;i++)for(j=i+1;j<3;j++){p[i].print();cout<<“与”;p[j].print();cout<<“的距离=”<<p[i].calculate(p[j])<<endl;}delete