我想重载operator[][]以提供对C++中字符的2D数组的内部访问。
现在我只重载了operator[],这大概是这样的
class Object
{
char ** charMap ;
char* operator[]( int row )
{
return charMap[row] ;
}
} ;它工作正常..但是有可能覆盖operator[][]吗?
发布于 2010-03-28 22:52:45
不要试图像- as别人说的那样做,按照你实际免费提供[][]语法的方式重载operator []。但这不是一件好事。
相反,它通过将实现细节-- char*指针--转向外部,破坏了类的封装和信息隐藏。一般来说,这是不可取的。
一个更好的方法是实现一个接受多个参数的operator [,],或者实现一个operator [][]。但这两者都不存在于C++中。
因此,通常的做法是在多个维度上完全抛弃operator []。更简洁的替代方法是使用operator (),因为运算符可以有多个参数:
class Object
{
char ** charMap ;
char& operator ()(int row, int column)
{
return charMap[row][column];
}
};有关更多信息,请参阅C++ FAQ Lite中的文章。
发布于 2010-03-28 22:34:51
没有操作符[][]:这是一行中的两个[]操作。您可以:
Object::operator[]返回表示行的第二个类的对象,该对象有自己的operator[]方法,该方法接受列号;get(int row, int column)方法,并使用该方法代替操作符重载。除非你的对象必须像数组一样工作,否则我建议你这样做。发布于 2010-03-28 22:33:51
没有operator[][]。计算a[x][y]首先在a上调用operator[],然后对结果再次调用operator[]。
因此,您的对象的operator[]必须返回另一个具有其自己的operator[]的对象,然后该对象将访问请求的值。
https://stackoverflow.com/questions/2533235
复制相似问题