如何在C++中重载operator []?

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)但我不知道如何建立...如果有人可以提前帮助我.

Jam*_*nze 5

有两种解决方案.首先,正如@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 上重载.

对于()版本,只需替换getRefoperator() (字面意思),然后删除Proxyoperator[].