#include <iostream> using namespace std; class Array2D { public: Array2D(int w, int h) { width = w; height = h; arr = new int*[height]; for(int i=0; i<height; i++) arr[i] = new int[width]; } ~Array2D() { for(int i=0; i<height; i++) delete arr[i]; delete arr; } int* operator[](int index) { return arr[index]; } private: int width; //第一维 int height; //第二维 int **arr; }; int main() { Array2D arr(3, 4); arr[0][0] = 1; cout<<arr[0][0]<<endl; } //类似矩阵的类如何能产生带两个或更多下标的下标运算符 //operator[]总是精确地带一个参数,但operator()能带任何数量的参数 //类似矩阵的类如何能产生带两个或更多下标的下标运算符 //operator[]总是精确地带一个参数,但operator()能带任何数量的参数 class Martix { public: Martix() { memset(data, 0, rows * cols); } int& operator()(unsigned row, unsigned col) { assert(row>=0 && row<=100); assert(col>=0 && col<=100); return data[cols*row + col]; } const int& operator()(unsigned row, unsigned col) const { assert(row>=0 && row<=100); assert(col>=0 && col<=100); return data[cols*row + col]; } private: enum{rows = 100, cols = 100}; int data[rows * cols]; }; int main() { Martix m; m(0, 1) = 5; cout<<m(3, 4)<<endl; return 0; }