c++ - 2 个不同对象的交换运算符重载 +

标签 c++ operator-overloading operator-keyword commutativity

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

假设我有:

RegularMatrix a;
SparseMatrix b;

我希望能够做到:

a+b;

还有:

b+a;

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

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

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

谢谢

最佳答案

是的,您需要两个版本。但是你可以将一个转发给另一个,如果这个操作真的是可交换的

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

关于c++ - 2 个不同对象的交换运算符重载 +,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3764604/

相关文章:

c++ - cv 没有成员 CAP_PROP_POS_FRAMES

haskell - 语法 Haskell 中的 @ 是什么?

c++ - 确定 MIME 内容类型

C++无法同时使用枚举和开关

c++ - 基于整数类型的两个类之间的隐式转换

C++ 重载运算符同时作为成员和函数?

opencv 矩阵大括号运算符

python - 如何在没有 list.extend 方法和没有 '+' 运算符的情况下扩展列表

c++ - 在 C++11 中,您能否将引用的基类传递给线程的构造函数并获得多态行为?

c# - 重载 '+' 的不可变列表是否有意义?