opérateur commutatif surcharge + de 2 objets différents
-
04-10-2019 - |
Question
J'ai 2 classes qui représentent une matrice:
1. RegularMatrix - représentation O (n ^ 2)
2. Matrice Creuse -. Une matrice qui est représentée comme liste chaînée (sans zéros)
permet de dire que j'ai:
RegularMatrix a;
SparseMatrix b;
Je veux être en mesure de le faire:
a+b;
et aussi:
b+a;
Je suis donc surcharger l'opérateur +. Ma question est, puisque je veux l'être plus commutative (a + b = b + a), ai-je besoin de mettre en œuvre 2, un pour les surcharges chaque cas?
RegularMatrix operator+(const RegualarMatrix &, const SparseMatrix &);
RegularMatrix operator+(const SparseMatrix & ,const RegualarMatrix &);
ou est-il une forme générale que le compilateur décide par lui-même?
Merci
La solution
Oui, vous avez besoin des deux versions. Mais vous pouvez transférer l'un à l'autre, si l'opération est vraiment commutative
RegularMatrix operator+(const SparseMatrix &a, const RegualarMatrix &b) {
return b + a;
}
Autres conseils
Les deux versions sont nécessaires, il suffit d'écrire après la première surcharge:
RegularMatrix operator+(const SparseMatrix &a, const RegualarMatrix &b)
{
return operator+(b,a);
}
ou une version plus simple:
RegularMatrix operator+(const SparseMatrix &a, const RegualarMatrix &b)
{
return b + a;
}