c++operator-overloadingoperator-keywordcommutativity

Commutative operator overloading + of 2 different objects


I have 2 classes which represent a matrix:
1. RegularMatrix - O(n^2) representation
2. SparseMatrix - a matrix that is represented as linked list (without zeros).

lets say i have:

RegularMatrix a;
SparseMatrix b;

i want to be able to do:

a+b;

and also:

b+a;

so i'm overloading the + operator. My question is, since I want the addition to be commutative (a+b = b+a), do i need to implement 2 overloadings, one for each case?

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

or is there a general form which the compiler decides by itself?

Thank you


Solution

  • Yes you need both versions. But you can forward the one to the other, if the operation really is commutative

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