操作员超载矩阵C **无代理**

operators overloads matrix c++ ** without proxy **

本文关键字:代理 超载 操作员      更新时间:2023-10-16

需要帮助

我是操作员超载的新手,现在正在尝试初始化矩阵使用oterator [] []超载。我想使用以下方式初始化矩阵:矩阵[0] [0] = 100

可以使用[] []?我如何使用它们?

 //main.cpp//
 void main()
    {
        Matrix m(2, 2);
        m[0][0] = 2;
    }

//matrix.h//
#ifndef MATRIX_H
#define MATRIX_H

class Matrix
{
public :
    Matrix(int ,int );
    Matrix operator [][] // *****im stuck here*****

private : 
    int numRows;
    int numCols;
    int **matrix;  
}
#endif

//matrix.cpp//
#include <iostream>
#include "Matrix.h"
using namespace std;

Matrix::Matrix(int rows,int cols)
    :numOfCols(cols),numOfRows (rows)
{
    matrix=new int *[cols];
    for(int i=0;i<rows;i++)
    {
        matrix[i]=new int [cols];
        for(int c=0;c<cols;c++)
        {
            matrix[i][c]=0;
        }

    }
}

有很多这样做的方法,这是我之前准备的一种方法,它使用代理类代表行。请注意,不会特别表现,也不会实现复制/分配/移动等。

#include <iostream>
using namespace std;

class Mat2 {
    public:
        Mat2( unsigned int x, unsigned int y ) :
            mX(x), mY(y), mData( new int[x * y] ) {}
        ~Mat2() { 
            delete [] mData; 
        }

        int & At( unsigned int x ,unsigned int y ) {
            return mData[ x * mY + y ];
        }
        class XProxy {
            public:
                XProxy( unsigned int x, Mat2 * mat ) :mX(x), mMat(mat) {}
                int & operator[]( unsigned int y ) {
                    return mMat->At( mX, y );
                }
            private:
                unsigned int mX;
                Mat2 * mMat;
        };

        XProxy operator[]( unsigned int x)  {
            return XProxy(x, this);
        }
    private:
        unsigned int mX, mY;
        int * mData;
};
int main() {
    Mat2 m(4,6);
    m[1][3] = 42;
    cout << m.At( 1, 3 ) << endl;
}