代码之家  ›  专栏  ›  技术社区  ›  Martin Žid

重载运算符+=具有两个类

  •  0
  • Martin Žid  · 技术社区  · 6 年前

    我有两个班,我们叫他们 A B 。我超载了 operator+= 课堂上 A. 。现在我想做这样的事情:

    A += B + B + B
    

    和类 B 没有过载 operator+ ,这是一个问题,因为求值是从右向左的(它要添加所有 B s,然后+=结果 A. )。 有没有什么方法可以在不超负荷的情况下实现我的目标 操作员+ 对于类 B ?

    2 回复  |  直到 6 年前
        1
  •  1
  •   Remy Lebeau    6 年前

    有没有什么方法可以在不超负荷的情况下实现我的目标 operator+ 对于类 B ?

    总之,

    A::operator+= 需要 B 作为输入 A += B + B + B to work ,您需要一种添加方式 B 对象一起生成新的 B 那个 += 可以作为输入,这正是 操作员+ 是为…而设计的。

        2
  •  0
  •   eerorika    6 年前

    这是可能的。

    您可以使 B 与算术类型之间可隐式转换。不需要重载的演示 operator+ 对于 B 根据要求,但允许准确表达您的愿望:

    struct B {
        B() = default;
    
        // this constructor makes B convertible from int
        B(int){}
    
        // this operator makes B convertible to int
        operator int() {
            return 42;
        }
    };
    
    
    struct A {
        A& operator+=(const B&) {
            return *this;
        }
    
        // alternative:
        // if you use this, then B does not need to convert from int
        // A& operator+=(int)
    };
    
    int main() {
        A A;
        B B;
        A += B + B + B;
    }