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

Était-ce utile?

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;
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top