Pregunta

Tengo 2 clases que representan una matriz:
1. RegularMatrix - O (n ^ 2) la representación
2. matriz dispersa -. Una matriz que se representa como lista enlazada (sin ceros)

Digamos que tengo:

RegularMatrix a;
SparseMatrix b;

quiero ser capaz de hacer:

a+b;

y

b+a;

así que estoy sobrecargar el operador +. Mi pregunta es, ya que quiero la adición de ser conmutativa (a + b = b + a), ¿Es necesario aplicar sobrecargas 2, uno para cada caso?

RegularMatrix operator+(const RegualarMatrix &, const SparseMatrix &);
RegularMatrix operator+(const SparseMatrix & ,const RegualarMatrix &);

o hay una forma general que el compilador decide por sí mismo?

Gracias

¿Fue útil?

Solución

Si necesitas ambas versiones. Pero se puede reenviar el uno al otro, si la operación es conmutativa realmente

RegularMatrix operator+(const SparseMatrix &a, const RegualarMatrix &b) {
    return b + a;
}

Otros consejos

Se requieren ambas versiones, acaba de escribir después de la primera sobrecarga:

RegularMatrix operator+(const SparseMatrix &a, const RegualarMatrix &b)
{
    return operator+(b,a);
}

o la versión más simple:

RegularMatrix operator+(const SparseMatrix &a, const RegualarMatrix &b)
{
    return b + a;
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top