操作题 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是整型动态数组。