如果我想要自己的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
答案 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;