0
votes

Comment créer une surcharge + de l'autre côté

J'ai une classe matricielle et un opérateur surchargé + travaillant avec d'autres matrices et scalaires. Lorsque j'essaie de l'utiliser comme MAT2 = MAT + 3; cela fonctionne bien, mais si je change de scalaire et matrice MAT2 = 3 + tapis; Il dit "les opérandes non valides à une expression binaire (" int 'et matrice ') "(3,4 est des lignes et des colonnes dans cette matrice). Comment je comprends que je n'ai pas surchargé + pour ces cas, mais je ne trouve pas comment surcharger

Matrix operator+(const T &a) {
    Matrix<row, col, T> result;
    for (int i = 0; i < row; ++i) {
        for (int j = 0; j < col; ++j) {
            result.elements[i][j] = elements[i][j] + a;
        }

    }
    return result;
}


3 commentaires

Surcharger l'opérateur + pour prendre un int comme lvalue.


Mais si j'ai surchargé cela avec T Ça ne fonctionne pas avec des types?


Related: Stackoverflow.com/a/11681308/179910 et Stackoverflow.com/a/20213363/179910


3 Réponses :


2
votes

Cette fonction est probablement dans votre classe. Mais comment pouvez-vous ajouter une surcharge à int ? int même a une classe? Est-il temps de crier et de paniquer?

Prenez une profonde respiration et regardez le Différence entre exploitant global et opérateur membre surcharges. Vous pouvez réellement surcharger pour int dans la portée globale, qui ressemblera probablement à: xxx


0 commentaires

0
votes

Pour pouvoir utiliser

template <typename T>
Matrix<T> operator+(Matrix<T> const& mat, const T &a ) {
   ...
}


0 commentaires

1
votes

Suggestion: Définir opérateur + = () en tant que fonction membre de la classe mais définissez opérateur + () en tant que couple de fonctions externes ( ami à la classe, si nécessaire). Peut-être définir les fonctions opérateur + () à l'aide de l'opérateur + = () méthode pour éviter la duplication de code.

quelque chose comme (ATTENTION: Code non testé et supposant Matrix a un constructeur de copie) xxx

observe que les deux opérateur + () reçoivent la matrice Valeur par copie .


0 commentaires