use*_*893 0 c++ overloading operators matrix
我operator []在使用C++ 重载矩阵时遇到了一些问题.让我说Class Matrix我有一个2X2.matrix m[2][2]如果我想从数组中调用一个元素m[1][1]而不是代码应该是什么样子object.m[1][1]?我想标题应该是类似int operator[] (const int)但我不知道如何建立...如果有人可以提前帮助我.
有两种解决方案.首先,正如@chris建议的那样,你可以使用
operator()( int i, int j ); 许多以数学为导向的人甚至更喜欢这个.否则,operator[]必须返回代理; []还定义了一个类型,第二个类型[]可以应用于该类型以返回正确的结果.对于二维结构,最简单的代理只是指向行的指针,因为它[]是为指针定义的.但是为了进行错误检查,通常最好返回一个完整的类类型.就像是:
template <typename T>
Matrix2D
{
int myRowCount;
int myColumnCount;
std::vector<T> myData;
public:
T& getRef( int i, int j )
{
return myData[ i * myRowCount + j ];
}
class Proxy
{
Matrix2D* myOwner;
int myRowIndex;
public:
Proxy( Matrix2D* owner, int i )
: myOwner( owner )
, myRowIndex( i )
{
}
T& operator[]( int j )
{
return myOwner->getRef( myRowIndex, j );
}
};
Proxy operator[]( int i )
{
return Proxy( this, i );
}
};
Run Code Online (Sandbox Code Playgroud)
你可能也想要一个const版本的Proxy,以便[]在const 上重载.
对于()版本,只需替换getRef为operator()
(字面意思),然后删除Proxy和operator[].
| 归档时间: |
|
| 查看次数: |
156 次 |
| 最近记录: |