孤独的猫

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

试题六
  阅读下列说明和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];  //没有越界提示
}

posted on 2011-06-27 21:04  孤独的猫  阅读(401)  评论(0编辑  收藏  举报