unarios sobrecarga sencillos poo operadores metodos matrices ejemplos definicion c++ matrix overloading operator-keyword

c++ - sencillos - sobrecarga de operadores poo



Operador de sobrecarga C++ (5)

Tengo clase CMatrix, donde es "doble puntero" a la matriz de valores.

class CMatrix { public: int rows, cols; int **arr; };

Simplemente necesito acceder a los valores de la matriz escribiendo:

CMatrix x; x[0][0] = 23;

Sé cómo hacer eso usando:

x(0,0) = 23;

Pero realmente necesito hacerlo a la inversa. Alguien me puede ayudar con eso? ¿Por favor?

Gracias chicos por la ayuda, al final lo hice de esta manera ...

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]; } ....

Gracias por tu ayuda, ¡realmente lo aprecio!


No hay operator[][] en C ++. Sin embargo, puede sobrecargar al operator[] para devolver otra estructura, y en ese operator[] sobrecarga operator[] también para obtener el efecto que desea.


No puede sobrecargar el operator [][] , pero la expresión común aquí es usar una clase proxy , es decir, el operator [] sobrecarga operator [] para devolver una instancia de clase diferente que tiene operator [] sobrecargado. Por ejemplo:

class CMatrix { public: class CRow { friend class CMatrix; public: int& operator[](int col) { return parent.arr[row][col]; } private: CRow(CMatrix &parent_, int row_) : parent(parent_), row(row_) {} CMatrix& parent; int row; }; CRow operator[](int row) { return CRow(*this, row); } private: int rows, cols; int **arr; };


Podría operator[] y hacer que devuelva un puntero a la row or column respectiva de la matriz. Debido a que los punteros soportan la subscripción por [], es posible acceder por la notation [][] ''double-square'' notation [][] .


Puede hacerlo sobrecargando el operator[] para devolver un int* , que luego es indexado por la segunda aplicación de [] . En lugar de int* también puede devolver otra clase que represente una fila, cuyo operator[] da acceso a elementos individuales de la fila.

Básicamente, las aplicaciones posteriores del operador [] funcionan sobre el resultado de la aplicación anterior.


Si crea una matriz usando contenedores de Biblioteca estándar, es trivial:

class Matrix { vector<vector<int>> data; public: vector<int>& operator[] (size_t i) { return data[i]; } };