实际上我对C ++中的二维数组有疑问。第一个问题是编译器如何解释二维数组与“正常”一维数组的区别。然后我需要为二维数组实现一个运算符重载。
这是普通数组的重载运算符:
const float& Matrix::operator[] (int index) const
{
const float& value = this->m[index];
return value;
}
这是二维数组的重载运算符:
const float& Matrix::operator[][](int index, int ndIndex) const
{
const float& value = this->m[index][ndIndex];
return value;
}
这是[] []运算符重载的理论正确实现吗?
然后有一个问题,为什么很难在[] []解决方案中获得对数组的写访问权限。最后一个问题是这个问题可以通过代理模式解决,但我从来没有听说过Proxy作为一个程序模式。
所有这些问题都是理论上的,所以我不需要真正的代码,只需要“幕后”的背景和关于代理模式的观察。
如果能帮助我,那会很好!在此先感谢!!
答案 0 :(得分:1)
operator[][]
中没有C++
。您不需要花哨的代理,只需重载operator[]
并使其返回一个数组(对应于该行)。从某种意义上说,这是代理(您返回的数组)
类似的东西:
float* Matrix::operator[](int row) // non-const version
{
return m[row];
}
和
const float* Matrix::operator[](int row) const // const overload
{
return m[row];
}
答案 1 :(得分:0)
(下次请问2个问题,如果你有2个问题。这是免费的。)
为了澄清问题的第二部分,Proxy对象是代表2D数组的一行的对象。它由第一级operator[]
返回,而Proxy本身实现第二级operator[]
。