image.png

    1. class CArray3D
    2. {
    3. public:
    4. int layer, row, col;
    5. T *arr;
    6. class CArray2D
    7. {
    8. public:
    9. T *arr_layer; // 一层的元素的起始地址
    10. int ccol; // 数组每行c列
    11. CArray2D(T *_p, int _c) : arr_layer(_p), ccol(_c) {}
    12. T *operator[](int _row)
    13. {
    14. return arr_layer + _row * ccol; // 返回本层的第r行的起始地址
    15. }
    16. operator T *()
    17. {
    18. return arr_layer; //返回值本层的起始地址
    19. }
    20. };
    21. CArray3D(int m, int n, int p) : layer(m), row(n), col(p)
    22. {
    23. arr = new T[m * n * p];
    24. }
    25. ~CArray3D()
    26. {
    27. delete[] arr;
    28. }
    29. CArray2D operator[](int _layer)
    30. {
    31. return CArray2D(arr + _layer * row * col, col);
    32. }
    33. };
    • 类内还能定义类
    • 内层的二维数组重载了 * 运算符,主要是为了 main 中的 memset 函数