创建2D数组类:如何访问2D数组类中的元素,如array [x] [y]

时间:2018-05-21 15:55:06

标签: c++

如果我想要自己的1D数组类,我可以覆盖operator []来读/写元素。像:

class A1D {
private:
  int a[10];  // This is irrelevant - it's just to simplify the example
              // The real class doesn't use a int array.
              // Here I just use an int array for simplicity

public:
  int& operator[] (int x) {  // <--- The interesting part...
    return a[x];
  }
};

int main()
{
  A1D a1d;
  a1d[5] = 42;
  std::cout << a1d[5] << std::endl;
  return 0;
}

以上工作正常。

但是如果我想对2D数组类做同样的事情呢?

class A2D {
private:
  int a[10][10]; // This is irrelevant - it's just to simplify the example
public:
  int& operator[][] (int x, int y) {  // This, of cause, doesn't work
    return a[x][y];
  }
};

我如何编码[][]来访问2D数组类中的元素?

编辑 - 一些澄清,因为第一个答案没有完全做我需要的

为简单起见,我在上面的示例中使用了int。在最后一堂课中,我不会使用int,因此我无法返回int*并依赖(*int)[..]作为第二级。

所以我在寻找:

A2D a;
a[3][4] = SomeOtherClass;   // Should call function in A2D with arg 3 and 4
SomeOtherClass x = a[3][4]; // Should call function in A2D with arg 3 and 4

2 个答案:

答案 0 :(得分:4)

您可以创建一个代理类,其中包含指向矩阵对应行的指针。与其他答案中解释的“返回指针”方法不同,这个方法也可以应用于3D和多维矩阵。

app-debug.apk

答案 1 :(得分:2)

您可以返回指向数组的指针,例如:

class A2D {
private:
  int a[10][10]; 
public:
  int* operator[] (int x) {  
    return a[x];
  }
};

我不喜欢这个解决方案...我认为最好有一个Row和一个Col类并返回一个对象,而不是一个原始指针。< / p>

您也可以使用operator()()代替括号作为替代

class A2D {
private:
  int a[10][10]; 
public:
  int& operator()(int x, int y) {  
    return a[x][y];
  }
};

A2D arr;
// ...
arr(3, 3) = 5;