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 Réponses :
Cette fonction est probablement dans votre classe. Mais comment pouvez-vous ajouter une surcharge à Prenez une profonde respiration et regardez le Différence entre exploitant global et opérateur membre surcharges. Vous pouvez réellement surcharger pour int code>?
int code> même a em> une classe? Est-il temps de crier et de paniquer?
int code> dans la portée globale, qui ressemblera probablement à: p>
Pour pouvoir utiliser
template <typename T> Matrix<T> operator+(Matrix<T> const& mat, const T &a ) { ... }
Suggestion: Définir quelque chose comme (ATTENTION: Code non testé et supposant observe que les deux opérateur + = () code> en tant que fonction membre de la classe mais définissez
opérateur + () code> en tant que couple de fonctions externes (
ami code> à la classe, si nécessaire). Peut-être définir les fonctions
opérateur + () code> à l'aide de l'opérateur
+ = () code> méthode pour éviter la duplication de code.
Matrix code> a un constructeur de copie) p>
opérateur + () code> reçoivent la matrice code> Valeur par copie . p> p>
Surcharger l'opérateur
+ code> pour prendre un
int code> 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