c++ - C++/编译器/重载中的二维数组

标签 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模式来解决,但是我从来没听说过Proxy是programm模式。

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

如果你能帮助我,那就太好了!提前致谢!!

最佳答案

C++ 中没有operator[][]。您不需要花哨的代理,只需重载 operator[] 并使其返回一个数组(对应于行)。从某种意义上说,这就是代理(你返回的数组)

类似于:

float* Matrix::operator[](int row) // non-const version
{
    return m[row];
}

const float* Matrix::operator[](int row) const // const overload
{
    return m[row];
}

关于c++ - C++/编译器/重载中的二维数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27221482/

相关文章:

c++ - 对象在什么时刻恰好是 "created"?

php - 将数组保存到数据库 mysql/php

arrays - 在线性时间内找到数组中大小为 4 的已排序子序列

c# - 如何合并两个asp.net mvc网站

C++ 所有者类和子类的派生类

mysql - 设计最佳实践 - 模型 vs Controller vs UI - CakePHP、MySQL

c++ - 将 C++ 类转换为另一个类以创建 OpenCV 轨迹栏句柄

c++ - 如何在 C++ 中启用 Unicode?

c++ - 性能比较 - pcap 文件读取 : C+ +'s ifstream VS C' s fread

arrays - MongoDB:如何搜索除特定值之外不包含任何内容的数组?