C++ch2-2-构造和析构函数+动态对象-2学时精选.ppt

C++ch2-2-构造和析构函数+动态对象-2学时精选.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
const int N = 100; float score[N][5]; cinn; for(int i=0;in;i++) for(j=0;j5;j++) cinscore[i][j]; ...... 无论班级中有多少个学生,程序均在内存中开辟100×5个实型数空间存放学生成绩,造成内存空间的浪费。 如何根据需要在程序的运行过程中动态分配存储内存空间? int n; cinn; float score[n][5]; 错误!数组的维数必须是常量 利用 new 运算符可以在程序中动态开辟内存空间。 new 数据类型[单位数]; new int[4]; 在内存中开辟了4个int型的数据空间,即16个字节 new 相当于一个函数,在内存开辟完空间后,返回这个空间的首地址,这时,这个地址必须用一个指针保存下来,才不会丢失。 int *p; p p=new int; new开辟的空间 *p=6; 6 可以用*p对这个空间进行运算。 int a=*p; new int; 在内存中开辟出四个字节的空间 int k,* p; cink; p=new int[k]; p指向新开辟空间的首地址。 p 同样,利用new运算符也可以开辟连续的多个空间(数组) for(int i=0;ik;i++) cinp[i]; 可以用p[i]的形式来引用新开辟的内存单元。 #includeiostream using namespace std; int main() { int k,*p; cink; cout“k = ”kendl; p = new int[k]; for(int i=0;ik;i++) cinp[i]; for(int j=0;jk;j++) coutp[j]= p[j]endl; } 利用new运算符创建数组 注意:用new开辟的内存单元没有名字,指向其首地址的指针是引用其的唯一途径,若指针变量重新赋值,则用new开辟的内存单元就在内存中“丢失”了,别的程序也不能占用这段单元,直到重新开机为止。 int * p, a[4]; p=new int[4]; p=a; a new开辟的单元 p 该段内存由于失去了“名字”,再也无法引用 coutp 用 new 运算符分配的空间,不能在分配空间时进行初始化。 同样,用new开辟的内存单元如果程序不“主动”收回,那么这段空间就一直存在,直到重新开机为止。 对象数组 #includeiostream using namespace std; class Rectangle { int length; int width; int height; public: void setRectangle(int l, int w, int h); void print(); }; void Rectangle::setRectangle(int l,int w, int h) { length=l; width=w; height=h; } void Rectangle::print() { coutlength, width, heightendl; } int main() { Rectangle r1; r1.setRectangle(10,20,30); r1.print(); Rectangle* arra[4]; for(int i=0;i4;i++) { arra[i]=new Rectangle(); arra[i]-setRectangle(i+10,i+20,i+30); arra[i]-print(); } } new运算符 delete运算符 2.6 动态对象的创建 delete运算符用来将动态分配到的内存空间归还给系统,使用格式为: delete p; delete也可以收回用new开辟的连续的空间。 int *point; cinn; point=new int[n]; ....... delete [ ]point; int *point; point=new int; ...... delete point; 注意:在此期间,point指针不能重新赋值,只有用new开辟的空间才能用delete收回。 当内存中没有足够的空间给予分配时,new 运算符返回空指针NULL(0)。 MyType* fp = new M

文档评论(0)

贪玩蓝月 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档