文档详情

作业━━第7章━━动态内存分配.doc

发布:2017-04-22约1.28万字共10页下载文档
文本预览下载声明
动态内存分配 【学习要点】 1.掌握C++的四个内存区域。 2.掌握堆内存和动态存储分配。 3.掌握new 与 delete 运算符的使用。 4.掌握动态创建对象。 5.掌握对象的浅拷贝、浅赋值。 6.掌握对象的深拷贝、深赋值。 ------------------------------------------------------------------------------------------------------------------------------------------------ 【例题分析】 1.为指针变量p赋初值,下列语句中不正确的是______。 A.int *p = 0; B.float *p = ( float* )50; C.int *p = new 50; D.float *p = new float[ 50 ]; 【答案】C 【解析】答案A给指针p 赋0值(空指针)是正确的;答案B将整数50的单元类型强制转换为实型指针也是可以的;答案D将指针p 指向在堆区上申请的具有50个元素的实型数组也是可以的;答案C错误,因为 new 运算符的运算对象不能是常数。 2.编写程序: 有数组a,其中存放20个数据为:{ 1, 2, 2, 2, 2, 3, 3, 4, 4, 5, 6, 6, 7, 8, 8, 8, 8, 9, 10, 10 },已按升序排列。试定义一个类ARRAY,实现将数组中相同的元素删除成只剩一个,即删除重复的数据。删除重复的数据后,数组a中的内容为:{ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }。要求: ①私有成员数据: ●int *a; //存放数据的动态数组容器的起始地址 ●int n; //动态数组容器中已存放数据的个数 ②公有成员函数: ●ARRAY ( int x[ ] , int size ); //用数组x[size] 来初始化ARRAY类的对象 ●~ARRAY ( ); //析构函数 ●void deleteSame ( ); //将数组中重复的元素删除成只剩一个 ●void show ( ); //按每行4个数据的格式输出 ③编写main()函数对ARRAY类进行测试。 【答案】编写程序如下: #includeiostream.h class ARRAY { int *a; int n; public: ARRAY ( int x[ ] , int size ) { a = new int [ size ]; n = size ; for ( int i=0; in; i++ ) a[ i ] = x[ i ]; } ~ARRAY ( ) { delete [ ] a; } void deleteSame ( ) { for ( int i=0, j=0; jn; j++ ) { while ( a[ i ] == a[ j ] jn ) j++; if ( jn ) { a[ ++i ] = a[ j ]; } } n = ++i ; } void show ( ) { for ( int i=0; in; i++ ) { cout a[ i ] \t; if ( (i+1)%4==0 ) cout endl; } cout endl; } }; void main( ) { int a[ 20 ] = { 1, 2, 2, 2, 2, 3, 3, 4, 4, 5, 6, 6, 7, 8, 8, 8, 8, 9, 10, 10 }; ARRAY arr( a, 20 ); arr.deleteSame( ); arr.show( ); } 3.编写程序: 有一个线性数列,共有size个元素,要求从指定下标m开始的n个元素进行降序排列。例如,原数列的10个元素排列为:{ 2,8,4,0,3,9,5,7,9,8 },若要求从第3个元素开始的5个数据降序排列,则得到的新数列为:{ 2,8,4,9,7,5,3,0,9,8 }。试定义一个List类,实现上述功能。要求: ①私有成员数据: ●int *arr; //存放动态数组容器空间的起始地址 ●int size; //动态数组容器中已存放元素的个数 ②公有成员函数: ●List ( int a[ ] , int len );
显示全部
相似文档