bob*_*obo 8 c++ operator-overloading
我想重载operator[][]以在C++中内部访问二维char数组.
现在我只是超载operator[],这就像是
class Object
{
char ** charMap ;
char* operator[]( int row )
{
return charMap[row] ;
}
} ;
Run Code Online (Sandbox Code Playgroud)
它工作正常.. operator[][]虽然可以覆盖吗?
Kon*_*lph 18
不要试图这样做 - 正如其他人所说的那样,重载operator []你实际上提供的[][]语法是免费的.但这不是一件好事.
相反 - 它通过将实现细节(char*指针)转向外部来破坏类的封装和信息隐藏.一般来说,这是不可取的.
一个更好的方法是实现一个operator [,]多于一个参数,或者实际上是一个operator [][].但是在C++中都不存在.
所以通常的做法是operator []完全放弃多个维度.干净的替代方法是使用,operator ()因为该运算符可以有多个参数:
class Object
{
char ** charMap ;
char& operator ()(int row, int column)
{
return charMap[row][column];
}
};
Run Code Online (Sandbox Code Playgroud)
有关更多信息,请参阅C++ FAQ Lite中的文章.
rjh*_*rjh 17
没有运营商[][]:这[]是连续的两个操作.你可以:
Object::operator[]返回一个表示一排,它有自己的一个第二类的对象operator[]方法,该方法采用列数;get(int row, int column)方法并使用它而不是运算符重载.我推荐这个,除非你的对象绝对必须像数组一样.没有operator[][].评估a[x][y]首先调用operator[]上a,然后operator[]再对这个结果.
因此operator[],您的对象必须返回另一个具有自己的对象operator[],然后该对象将访问所请求的值.