首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >operator[][] C++

operator[][] C++
EN

Stack Overflow用户
提问于 2010-03-28 22:29:34
回答 5查看 5.6K关注 0票数 9

我想重载operator[][]以提供对C++中字符的2D数组的内部访问。

现在我只重载了operator[],这大概是这样的

代码语言:javascript
运行
复制
class Object
{
    char ** charMap ;
    char* operator[]( int row )
    {
        return charMap[row] ;
    }
} ;

它工作正常..但是有可能覆盖operator[][]吗?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2010-03-28 22:52:45

不要试图像- as别人说的那样做,按照你实际免费提供[][]语法的方式重载operator []。但这不是一件好事。

相反,它通过将实现细节-- char*指针--转向外部,破坏了类的封装和信息隐藏。一般来说,这是不可取的。

一个更好的方法是实现一个接受多个参数的operator [,],或者实现一个operator [][]。但这两者都不存在于C++中。

因此,通常的做法是在多个维度上完全抛弃operator []。更简洁的替代方法是使用operator (),因为运算符可以有多个参数:

代码语言:javascript
运行
复制
class Object
{
    char ** charMap ;
    char& operator ()(int row, int column)
    {
        return charMap[row][column];
    }
};

有关更多信息,请参阅C++ FAQ Lite中的文章。

票数 19
EN

Stack Overflow用户

发布于 2010-03-28 22:34:51

没有操作符[][]:这是一行中的两个[]操作。您可以:

  • Object::operator[]返回表示行的第二个类的对象,该对象有自己的operator[]方法,该方法接受列号;
  • 编写一个get(int row, int column)方法,并使用该方法代替操作符重载。除非你的对象必须像数组一样工作,否则我建议你这样做。
票数 17
EN

Stack Overflow用户

发布于 2010-03-28 22:33:51

没有operator[][]。计算a[x][y]首先在a上调用operator[],然后对结果再次调用operator[]

因此,您的对象的operator[]必须返回另一个具有其自己的operator[]的对象,然后该对象将访问请求的值。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2533235

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档