在C++中重载运算符加2个对象时返回整数

盗墓笔记

我想在 + 2 个对象时返回整数。但它发现了错误

E2140 表达式必须具有整数或无作用域的枚举类型

错误 C2110“+”:无法添加两个指针

class Sum {
    int number;
public:
    Sum(int number) : number(number) {};
    int getNumber() const { return number; }
    void setNumber(int val) { number = val; }

    int operator+ (Sum* d1) {
        int result;
        result = this->getNumber() + d1->getNumber();
        return result;
    }
};

int main() {
    Sum* num1 = new Sum(17);
    Sum* num2 = new Sum(9);

    int result = num1 + num2;
    cout << result;
}

我可以重载 2 个对象以获得整数结果吗?

丘里尔

因为运算符是在类中定义的,所以它的左侧必须是 type Sum,右侧必须是 type Sum*(因为那是 parameter 的类型d1)。

但是,您尝试在此处添加两个指针:

int result = num1 + num2;

正确的是取消引用左侧

//           V
int result = *num1 + num2;

更好的是使用引用作为右侧参数重载运算符并且根本不使用new(您实际上不需要new在现代 C++ 中使用)。

//             VVVVV     V
int operator+ (const Sum &d1) {
    return this->getNumber() + d1.getNumber();
}

...

int main() {
    Sum num1(17);
    Sum num2(9);

    int result = num1 + num2;
    cout << result;
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章