
class CArray3D
{
public:
int layer, row, col;
T *arr;
class CArray2D
{
public:
T *arr_layer; // 一层的元素的起始地址
int ccol; // 数组每行c列
CArray2D(T *_p, int _c) : arr_layer(_p), ccol(_c) {}
T *operator[](int _row)
{
return arr_layer + _row * ccol; // 返回本层的第r行的起始地址
}
operator T *()
{
return arr_layer; //返回值本层的起始地址
}
};
CArray3D(int m, int n, int p) : layer(m), row(n), col(p)
{
arr = new T[m * n * p];
}
~CArray3D()
{
delete[] arr;
}
CArray2D operator[](int _layer)
{
return CArray2D(arr + _layer * row * col, col);
}
};
- 类内还能定义类
- 内层的二维数组重载了
*
运算符,主要是为了 main
中的 memset
函数