使用两个类重载operator + =

时间:2018-03-30 20:54:29

标签: c++ operator-overloading overloading

我有两个课程,我们称他们为AB。我在课程operator+=中重载了A。现在我想做这样的事情:

A += B + B + B

课程B并没有超载operator+,这是一个问题,因为评估是从右到左(它想要添加所有B然后+ =结果A)。 有没有办法实现我的目标,而没有真正为课程operator+重载B

2 个答案:

答案 0 :(得分:1)

  

有没有办法实现我的目标,而没有真正为课程operator+重载B

总之,

A::operator+=需要B作为输入,因此如果您需要A += B + B + B to work,则需要一种方法将B个对象添加到一起以生成新的B +=可以作为输入,这正是operator+的意思。

答案 1 :(得分:0)

这是可能的。

您可以使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;
}