使用VC6打开考生文件夹下的工程test27_3。此工程包含一个test27_3.cpp,其中定义了类ARRAY,但类的定义并不完整。请按要求完成下列操作,将程序补充完整。 (1)完成类ARRAY的带一个参数的构造函数,参数i为int型,如果i不是正

admin2010-02-08  24

问题 使用VC6打开考生文件夹下的工程test27_3。此工程包含一个test27_3.cpp,其中定义了类ARRAY,但类的定义并不完整。请按要求完成下列操作,将程序补充完整。
   (1)完成类ARRAY的带一个参数的构造函数,参数i为int型,如果i不是正数则输出错误信息并退出,否则申请int型的大小为i的空间,然后把i赋值给类的数据成员num。请在注释“//**1**”之后添加适当的语句。
   (2)完成类ARRAY的拷贝初始化构造函数,注意解决重复删除的问题,请在注释“//**2**”之后添加适当的语句。
   (3)完成类ARRAY的重载的运算符函数[],参数i为int型,如果i超界则输出错误信息并退出,否则把下标为i的元素返回,请在注释“//**3**”之后添加适当的语句。
   (4)完成类ARRAY的重载的运算符函数二,同样需要注意解决重复删除的问题,不能只是简单的赋值,请在注释“//** 4**”之后添加适当的语句。
   注意:除在指定位置添加语句之外,请不要改动程序中的其他内容。
   源程序文件test27_3.cpp清单如下;
       #include<iostream.h>
       #include<stdlib.h>
       class ARRAY
       {
       private:
         int* p, num;
       public:
         ARRAY ( ) {p=new int[ 10 ] , num=10; }
         ARRAY ( int i)
         {
             // ** 1 **
       {
             cout<<“错误!数组长度应为正。\n”;
             exit(0);
       }      
       p=new int;
       num= i;
       }      
       ARRAY(const ARRAY & a);
       int &operator [ ] (int i);
       ~ARRAY() {delete p; }
       ARRAY&operator=(const ARRAY& a);
       friend ARRAY operator+(ARRAY &a,ARRAY&b);
       friend ostream& operator<< (ostream&os,ARRAY&a);
      };         
      ARRAY: :ARRAY(const ARRAY &a)
      {      
       // ** 2 **
       for (int i=0; i<num; i++)
             p=a.p;
      }        
      int &ARRAY: :operator [ ] (int i)
      {        
       // ** 3 **
      {        
             cout<<“越界访问!”;
             exit (0);
       }
       return p;
      }
      ARRAY & ARRAY::operator=(const ARRAY& a)
      {
       num= a. num;
       p=new int [num];
       for (int i=0; i<num; i++)
           p=a.p;
       // ** 4 **
      }
      ARRAY operator+(ARRAY & a,ARRAY & b)
      {
       if (a.num! =b. hum)
       {
           cout<<“数组长度不相同!” <<end1;
           exit (0);
       }
       ARRAY t (a.num);
       for(int i=0;i<a.num;i++)
           t.p=a.p+b.p;
       return t;
      }
      ost ream& operator<< (ostream&os, ARRAY&a)
       {
       int i=0;
       for(;i<a.num; i++)
       {
           cout<<a.p<<’  ’;
           if (!((i+1) %10) ) cout<<end1;
       }
       return  os;
      }
      void main ( )
      {
       ARRAY a(3);
       a[0]=a[1] =a[2]=3;
       cout<<’a’<<a<<end1;
       ARRAY b ( a );
       cout<<’b’<<b<<end1;
       ARRAY c(2);
       c=a+b+b;
       cout<<’c’<<c<<end1;
       c=( (b= (a+b)) +c);
       cout<<’a’<<a<<’b’<<b<<’c’<<c<<end1;
       a[7]=3;
       cout<<a;
      }

选项

答案(1) if(i<=0) (2) num=a.num; p=new int[num]; (3) d(i>=num||i<0) (4) return * this;

解析 主要考查考生对于一个特殊的类——安全数组的掌握,其中涉及了友元函数、重载函数等,其中(2)中必需申请新的空间,这样可以使得两个对象分别占用不同的两个空间,在自动调用析构函数时不会遇到重复删除的问题,这种方法要掌握。
转载请注明原文地址:https://jikaoti.com/ti/WFkiFFFM
0

最新回复(0)