操作题
1. 请使用VC6或使用[答题]菜单打开考生文件夹proj3下的工程proj3,其中声明的CDeepCopy是一个用于表示动态数组的类。请编写其中的复制构造函数。
要求:
补充编制的内容写在“//********333********”与“//********666********”之间,不得修改程序的其他部分。
注意:程序最后将结果输出到文件out.dat中。输出函数writeToFile已经编译为obj文件,并且在本程序中调用。
//CDeepCopy.h
#include <iostream>
#include <string>
using namespace std;
class CDeepCopy
{
public:
int n; //动态数组的元素个数
int * p; //动态数组首地址
CDeepCopy (int);
~CDeepCopy ();
CDeepCopy(const CDeepCopy& r);
//复制构造函数
};
void writeToFile (char * );
//main. cpp
#include "CDeepCopy. h"
CDeepCopy:: ~CDeepCopy () { delete [] p;}
CDeepCopy::CDeepCopy (int k) { n = k; p=new int[n];}
//构造函数实现
CDeepCopy:: CDeepCopy ( const CDeepCopy& r)
//复制构造函数
{
//******** 333********
//******** 666********
}
int main ()
{
CDeepCopy a (2), d (3);
a.p[0] =1; d.p[0] =666;
//对象a,d数组元素的赋值
{
CDeepCopy b (a);
a.p[0] =88;
cout <<b.p[0];
//显示内层局部对象的数组元素
}
cout <<d.p[0];
//显示d数组元素a.p[0]的值
cout <<" d fade away; \n"; cout <<a. p[0];
//显示a数组元素a.p[0]的值
writeToFile ("");
return 0;
}
【正确答案】n=r.n; //把对象r的成员变量n赋值
给n
p=new int[n]; //给p动态分配大小为n的空间
for(int index=0; index<n; index++) //index从零开始,小于n为条件遍历
p[index]=r.p[index]; //把对象r中的成员变量p[index]赋值给p[index]
【答案解析】[考点] 本题考查CDeepCopyr类,其中涉及动态数组、构造函数、析构函数和复制构造函数。
主要考查考生对复制构造函数的掌握,复制构造函数要复制动态数组,应先使用new分配空间,然后使用循环语句逐个复制,注意这里不能使用strcpy函数复制,因为p是整型动态数组。