C/C++ codetemplate class Array;
template
class ArrayBody
{
friend class Array;
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=false;
if(row_error== true || column_error == true)
throw 'e';
}
catch(char)
{
if (row_error == true)
cerr<
if(column_error== true)
cerr<
cout<
}
return tpBody[iCurrentRow*iColumns+j];
}
~ArrayBody(){delete[] tpBody;}
};
template class Array
{
ArrayBody tBody;
public:
ArrayBody & operator [](int i)
{
tBody.iCurrentRow= i;
return tBody;
}
Array(int iRsz, int iCsz):tBody(iRsz,iCsz){}
};
void main()
{
Array a1(10,20);
Array a2(3,5);
int b1;
double b2;
b1 = a1[-5][10];
b1 = a1[10][15];
b1 = a1[1][4];
b2 = a2[2][6];
b2 = a2[10][20];
b2 = a2[1][4];
}
这篇博客详细介绍了如何使用C++的模板类来创建一个动态二维数组类`Array`,包括`ArrayBody`作为内部类处理实际数据,以及友元函数用于访问元素。在访问元素时进行了越界检查,并在发生错误时抛出异常。博客通过实例展示了如何初始化和访问`Array`对象的元素。
5107

被折叠的 条评论
为什么被折叠?



