我有一个类CMatrix,其中是指向值数组的“双指针”。
class CMatrix {
public:
int rows, cols;
int **arr;
};
我只需要通过键入以下内容来访问matrix的值:
CMatrix x;
x[0][0] = 23;
我知道如何做到这一点使用:
x(0,0) = 23;
但我真的需要用另一种方法有人能帮我吗?
最后我是这样做的...
class CMatrix {
public:
int rows, cols;
int **arr;
public:
int const* operator[]( int const y ) const
{
return &arr[0][y];
}
int* operator[]( int const y )
{
return &arr[0][y];
}
....
7条答案
按热度按时间t2a7ltrp1#
您不能重载
operator [][]
,但这里的常见习惯用法是使用 * 代理类 *,即在Matrix类上重载operator []
以返回另一个类的示例,然后在该类上重载operator []
。例如:
kulphzqa2#
在C++中没有
operator[][]
。但是,您可以重载operator[]
以返回另一个结构,并在该重载中也使用operator[]
以获得您想要的效果。acruukt93#
您可以通过重载
operator[]
返回一个int*
,然后由[]
的第二个应用程序进行索引来完成此操作。您还可以返回另一个表示行的类来代替int*
,该类的operator[]
提供对行中各个元素的访问。基本上,运算符[]的后续应用程序处理前一个应用程序的结果。
iyr7buue4#
如果您使用标准库容器创建矩阵,则很简单:
cnjp1d6j5#
C++23中的容器已经添加了对这一点的一些支持:Multidimensional subscript operator
尽管使用的语法是
v[x, y, z]
而不是v[x][y][z]
。voj3qocg6#
你可以
operator[]
并让它返回一个指针指向矩阵的各个row or column
。因为指针支持下标[ ],所以可以通过'double-square'notation [][]
进行访问。mhd8tkvw7#
其他的答案告诉你怎么做,但是...
别这样。
而是重载
operator ()
。为什么不呢?
C++常见问题解答解释了这一切。直接从马的嘴里。
tl;dr:封装和安全性