使用VC6打开考生文件夹下的工程test13_3。此工程包含一个test13_.cpp,其中定义了类Vector,但类的定义并不完整。请按要求完成下列操作,将程序补充完整。 (1)完成构造函数的定义,把数据成员size初始化为参数s的值,数据成员bu

admin2009-01-15  29

问题 使用VC6打开考生文件夹下的工程test13_3。此工程包含一个test13_.cpp,其中定义了类Vector,但类的定义并不完整。请按要求完成下列操作,将程序补充完整。
   (1)完成构造函数的定义,把数据成员size初始化为参数s的值,数据成员buffer指向动态申请的int型size大小的空间。请在注释“//**1**”之后添加适当的语句。
   (2)完成拷贝构造函数的定义,注意解决多次删除的问题。请在注释“//**2**”之后添加适当的语句。
   (3)完成成员函数elem的定义,该函数返回buffer的第ndx个元素的值,注意如果ndx超界,请输出“error in index”。请在注释“//**3**”之后添加适当的语句。
   (4)完成析构函数的定义,要求先将字符d打印在屏幕上,再释放buffer指向的空间。请在注释“//**4**”之后添加适当的语句。
   输出结果如下:
   1234567891012345678910dd
   注意:除在指定的位置添加语句外,请不要改动程序中的其他语句。
   源程序文件test13_3清单如下:
   #include<iostream.h>
   #include<stdlib.h>
   class Vector
   {
   public:
     Vector(int s=100);
     Vector(Vector &v);
     int &elem(int ndx);
     void display();
     void  set();
     ~Vector();
   protected:
     int  size;
     int  *buffer;
   };
   Vector::Vector(int  s)
   {
       //  **  1  **
   }
   Vector::Vector(Vector  &v)
   {
          //  **  2  **
      for(int  i=0;  i<size;  i++)
      {
           *(buffer+i)=*(v.buffer+i);
      }
   }
   int  &Vector::elem(int  ndx)
   {
        //  **  3  **
   {
         cout<<"error  in  index"<<endl;
         exit(1);
    }
    return buffer[ndx];
   }
   void Vector::display()
   {
    for(int  j=0;j<size;j++)
      cout<<elem(i)<<endl;
   }
   void  Vector::set()
   {
     for(int  j=0;i<size;j++)
       elem(j)=j+1;
   }
   Vector::~Vector()
   {
        //  **  4  **
   }
   void main()
   {
     Vector a(10);
     Vector b(a);
     a. set();
     b. set();
     a. display();
     b. display();
   }

选项

答案(1) size=s; buffer=new int[size]; (2) size=v.size; buffer=new int[size]; (3) if(ndx<O||ndx>=size) (4) cout<<"d"<<endl; delete[]buffer;

解析 本题主要考查考生对于类的构造函数与成员函数定义的掌握,注意(2)中赋值的应用,为了防止重复删除,不能直接将指针赋值,必须使用动态申请new建立一块新的空间,并且将原来对象的成员全部复制到新的空间中:(4)中对动态一维数组空间删除的时候,应该使用delete关键字,并不管原数组大小是多少,一律只写一对中括号“[]”加上变量名。
转载请注明原文地址:https://kaotiyun.com/show/RKID777K
0

最新回复(0)