Comment surcharger l'opérateur () ?
Bonjour,
J'ai créé une classe matrice pour inclure le calcul matriciel dans mon programme. Je sais que des librairies existent mais moi je veux pas les utiliser. Je tiens à le faire par moi-même.
J'ai surchargé l'opérateur () pour pouvoir accéder a un élément tableau private. Voilà le code:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
| #ifndef MATRIX_H
#define MATRIX_H
#include <QVector>
class Matrix
{
public:
Matrix();
void setSize(int rowNumber, int columnNumber);
int rowCount();
int columnCount();
double operator()(int rowId, int columnId) const;
double& operator()(int rowId, int columnId);
void reverse();
void transpose();
double determinant();
~Matrix();
private:
int row;
int column;
QVector<double> data;
double Det3x3Matrix(Matrix *M);
};
Matrix operator+(Matrix a, Matrix b);
Matrix operator*(Matrix a, Matrix b);
#endif // MATRIX_H |
Code:
1 2 3 4 5 6 7 8 9
| double Matrix::operator()(int rowId, int columnId) const
{
return data[column*rowId+columnId];
}
double& Matrix::operator()(int rowId, int columnId)
{
return data[column*rowId+columnId];
} |
L'intérêt est de pouvoir déclarer une matrice M et d'appeler ses éléments avec M(0,0) ou M(2,3), etc... ça marche bien sauf si M est un pointeur. Cette fonction ne marche pas et je ne sais pas pourquoi:
Code:
1 2 3 4 5 6 7 8 9 10 11 12
| double Matrix::Det3x3Matrix(Matrix *M)
{
double determinant = 0;
if (M->rowCount() == M->columnCount()) // On vérifie que M est une matrice carrée
{
determinant =
M[0, 0] * (M[1, 1] * M[2, 2] - M[2, 1] * M[1, 2]) -
M[0, 1] * (M[1, 0] * M[2, 2] - M[2, 0] * M[1, 2]) +
M[0, 2] * (M[1, 0] * M[2, 1] - M[2, 0] * M[1, 1]);
}
return determinant;
} |
Il ne comprend pas l'opérateur -. Normal car je ne l'ai pas surchargé. En revanche l'opération devrait se passer entre des double, et pas des Matrices. J'en conclu que M[0,0] ne renvoie pas un double mais une matrice apparament. Pourquoi????
Merci de votre aide.
Cordialement