C ++ / Compiler / Overload中的二维数组

时间:2014-12-01 03:57:47

标签: c++ arrays design-patterns multidimensional-array proxy

实际上我对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作为一个程序模式。

所有这些问题都是理论上的,所以我不需要真正的代码,只需要“幕后”的背景和关于代理模式的观察。

如果能帮助我,那会很好!在此先感谢!!

2 个答案:

答案 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[]