首页 > 解决方案 > 在 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 个对象以获得整数结果吗?

标签: c++operator-overloading

解决方案


因为运算符是在类中定义的,所以它的左侧必须是类型Sum,而右侧必须是类型Sum*(因为那是参数的类型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;
}

推荐阅读