问题 问答题

使用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关键字,并不管原数组大小是多少,一律只写一对中括号“[]”加上变量名。

单项选择题
判断题