
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 函数