作业━━第7章━━动态内存分配.doc
文本预览下载声明
动态内存分配
【学习要点】
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 );
显示全部