zoukankan      html  css  js  c++  java
  • 软件设计师2004年5月下午试题6(C++ 数组下标检测)

    试题六
      阅读下列说明和C++程序,将应填入__(n)__处的字句写在答题纸的对应栏内.
    [程序6说明]
      C++语言本身不提供对数组下标越界的判断.为了解决这一问题,在程序6中定义了相应的类模板,使得对于任意类型的二维数组,可以在访问数组元素的同时,对行下标和列下标进行越界判断,并给出相应的提示信息.
    [程序6]
    #include <iostream.h>
    template <class T> class Array;
    template <Class T> class ArrayBody {
     friend class Array<T>;
     T* tpBody;
     int iRows,iColumns,iCurrentRow;
     ArrayBody(int iRsz,int iCsz){
      tpBody = new T[iRsz*iCsz];
      iRows = iRsz;iColumns = iCsz;iCurrentRow = -1:
    }
    public;
     T& operator[](int j){
      bool row_error,column_error;
      row_error = column_error =false;
      try {
       if(iCurrentRow < 0 || iCurrentRow >= iRows)
        row_error = true;
       if(j<0 || j>= iColumns)
        column_error = true;
       if(row_error == true || column_ error == true)
        throw 'error';
      }
      catch(char){
       if(row_error == true)
        cerr << "行下标越界[" << iCurrentRow << "]";
       if(column_error = true)
        cerr << "列下标越界[" << j << "]";
       cout << "\n";
      }
      return tpBody[iCurrentRow * iColumns + j];
     }
     ~Arraygody(){delete[]tpBody:}
    };
    template <class T> class Array {
     ArrayBody<T> tBody;
     public;
      ArrayBody<T> & operator[](int i) {
       tBody.iCurrentRow=i;
       return tBody;
      }
     Array(int iRsz,int iCsz):tBody(iRsz,iCsz) { }
     }; 

    void main()
    {
     Array<int> a1(10,20);
     Array<double> a2(3,5);
     int b1;
     double b2; ·
     b1 = a1[-5][10]; //有越界提示:行下标越界[-5]
     b1 = a1[10][15]; //有越界提示:行下标越界[10]
     b1 = a1[1][4];  //没有越界提示
     b2 = a2[2][6];  //有越界提示:列下标越界[6]
     b2 = a2[10][20]; //有越界提示;行下标越界[10]列下标越界[20]
     b2 = a2[1][4];  //没有越界提示
    }

  • 相关阅读:
    菜根谭#54
    菜根谭#53
    svn 的权限配置及命令
    linux部署git环境
    百度编辑器造成无用图片解决方案
    php无限极分类的实现
    phpstudy 升级mysql 5.7
    yii2常用查询
    mysql创建外键注意事项
    阿里云短信
  • 原文地址:https://www.cnblogs.com/djcsch2001/p/2091643.html
Copyright © 2011-2022 走看看