首页>计算机等级考试>模拟试题>正文
2010年下半年计算机等级考试二级C++上机试题及解析(七)

www.zige365.com 2010-7-6 14:22:18 点击:发送给好友 和学友门交流一下 收藏到我的会员中心

  (2)完成类ARRAY的拷贝初始化构造函数,注意解决重复删除的问题,请在注释“//**2**”之后添加适当的语句。

  (3)完成类ARRAY的重载的运算符函数[],参数i为int型,如果i超界则输出错误信息并退出,否则把下标为i的元素返回,请在注释“//**3**”之后添加适当的语句。

  (4)完成类ARRAY的重载的运算符函数=,同样需要注意解决重复删除的问题,不能只是简单的赋值,请在注释“//**4**”之后添加适当的语句。

  注意:除在指定位置添加语句之外,请不要改动程序中的其他内容。

  源程序文件kt12_3.cpp清单如下:

  #include

  #include

  classARRAY

  { private:

    int*p,num;

    public:

    ARRAY(){p=newint[10],num=10;}

  ARRAY(inti)

  { //**1**

    { cout<<"错误!数组长度应为正。\n";

      exit(0); }

    p=newint[i];

    num=i; }

  ARRAY(constARRAY&a);

  int&operator[](inti);

  ~ARRAY(){deletep;}

  ARRAY&operator=(constARRAY&a);

  friendARRAYoperator+(ARRAY&a,ARRAY&b);

  friendostream&operator<<(ostream&os,ARRAY&a); };

  ARRAY::ARRAY(constARRAY&a)

  { //**2**

    for(inti=0;i

    p[i]=a.p[i]; }

  int&ARRAY::operator[](inti)

  { //**3**

    { cout<<"越界访问!";

      exit(0); }

    returnp[i]; }

  ARRAY&ARRAY::operator=(constARRAY&a)

  { num=a.num;

    p=newint[num];

    for(inti=0;i

    p[i]=a.p[i];

    //**4** }

  ARRAYoperator+(ARRAY&a,ARRAY&b)

  { if(a.num!=b.num)

    { cout<<"数组长度不相同!"<

      exit(0); }

    ARRAYt(a.num);

    for(inti=0;i

    t.p[i]=a.p[i]+b.p[i];

    returnt; }

  ostream&operator<<(ostream&os,ARRAY&a)

  { inti=0;

    for(;i

    { cout<

      if(!((i+1)))cout<

    returnos; }

  voidmain()

  { ARRAYa(3);

    a[0]=a[1]=a[2]=3;

    cout<<'a'<

    ARRAYb(a);

    cout<<'b'<

    ARRAYc(2);

    c=a+b+b;

    cout<<'c'<

    c=((b=(a+b))+c);

    cout<<'a'<

    a[7]=3;

    cout<

  【参考答案】

  (1)if(i<=0)

  (2)num=a.num;

     p=new int[num];

  (3)if(i>=num||i<0)

  (4)return *this;

  【试题解析】

  主要考查对一个特殊的类--安全数组的掌握,其中涉及了友元函数、重载函数等,其中(2)中必需申请新的空间,这样可以使得两个对象分别占用不同的两个空间,在自动调用析构函数时不会遇到重复删除的问题,这种方法要掌握。

 

 

本新闻共2页,当前在第2页  1  2  

我要投稿 新闻来源: 编辑: 作者:
相关新闻
2010年下半年计算机等级考试二级C++上机试题及解析(六
2010年下半年计算机等级考试二级C++上机试题及解析(五