请打开考生文件夹下的解决方案文件proj3,其中声明了ValArray类,该类在内部维护一个动态分配的整型数组。ValArray类的复制构造函数应实现对象的深层复制。请编写ValArray类的复制构造函数。在main函数中给出了一组测试数据,此种情况下程序

admin2020-04-07  45

问题 请打开考生文件夹下的解决方案文件proj3,其中声明了ValArray类,该类在内部维护一个动态分配的整型数组。ValArray类的复制构造函数应实现对象的深层复制。请编写ValArray类的复制构造函数。在main函数中给出了一组测试数据,此种情况下程序的输出应该是:
    ValArray v1={1,2,3,4,5}
    ValArray v2={1,2,3,4,5}
    要求:
    补充编制的内容写在“//********333*********”与“********666********”之间,不得修改程序的其他部分。
    注意:程序最后将结果输出到文件out.dat中。输出函数writeToFile已经编译为boj文件,并且在本程序中调用。
    //ValArray.h
    #include<iostream>
    using namespace std;

    class ValArray{
      int * v;
      int Size;
    public:
      ValArray(const int * p,int n):size(n)
      {
        v=new int[size];
        for(int i=0;i<size;i++)
          v=P
      }

      ValArray(const ValArray&other);

      ~ValArray(){delete[]v;)

      void print(ostream& out)const
      {
        out<<’{’;
        for(int i=0;i<size-1;i++)
          out<<v  <<",";
        out<<v[size-1]  <<’)’;
      }
      void setArray(int i,int val)
      {
        v=val;
      }
    };

    void writeToFile(const char*);

    //main.cpp
    #include"ValArray.h"

    ValArray::  ValArray  (constValArray& other)
    {
    //********333********

    //******** 666********
    }
    int main()
    {
      const int a[]={1,2,3,4,5);
      ValArray vl(a,5);
      cout<<"ValArray vl=";
      vl.print(cout);
      cout<<endl;
      ValArray v2(v1);
      cout<<"ValArray v2=";
      v2.print(cout);
      cout<<endl;
      writeToFile("");
      return 0;
    }

选项

答案1 size =other.size; 2 v=new int[size]; 3 for(int i =0;i <size;i++) 4 setArray(i,other.v[i]);

解析 主要考查考生对复制构造函数的掌握,ValArray类的复制构造函数应实现对象的深层复制。由ValArray类的构造函数:
    1    ValArray(corlst int★  p,int n):size(n)
    2    {
    3       v=new int[size];
         //给v分配大小为Size的空间
    4       for(int i=0;i  <size;i++)  //遍历p
    5          v=p
         //把p赋值给v
    6  }
    可知类中v是动态数组,size表示数组长度,因此要先给v分配空间为size,再逐个元素复制以达到对象的深层复制。
转载请注明原文地址:https://kaotiyun.com/show/Jw8p777K
0

最新回复(0)