可交换的oprator重载+ 2个不同的对象

Ash*_*ban 6 c++ operator-overloading operator-keyword commutativity

我有2个表示矩阵的类:
1.RegularMatrix - O(n ^ 2)表示
2. SparseMatrix - 表示为链表(没有零)的矩阵.

让我说我有:

RegularMatrix a;
SparseMatrix b;
Run Code Online (Sandbox Code Playgroud)

我希望能够做到:

a+b;
Run Code Online (Sandbox Code Playgroud)

并且:

b+a;
Run Code Online (Sandbox Code Playgroud)

所以我正在重载+运算符.我的问题是,因为我希望加法是可交换的(a + b = b + a),我是否需要实现2个过载,每种情况一个?

RegularMatrix operator+(const RegualarMatrix &, const SparseMatrix &);
RegularMatrix operator+(const SparseMatrix & ,const RegualarMatrix &);
Run Code Online (Sandbox Code Playgroud)

或者是否有编译器自己决定的一般形式?

谢谢

Joh*_*itb 8

是的,你需要两个版本.但是如果操作真的是可交换的,你可以把它转发到另一个

RegularMatrix operator+(const SparseMatrix &a, const RegualarMatrix &b) {
    return b + a;
}
Run Code Online (Sandbox Code Playgroud)

  • 是啊.当然.在我前面几秒钟潜行.就像你真的需要点数...... (3认同)