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

Return Integer while overloading operator plus 2 object in c++

我想 return 整数 when + 2 个对象。 但是它发现了错误

E2140 expression must have integral or unscoped enum type

Error C2110 '+': cannot add two pointers

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 个对象以获得整数结果吗?

您正在创建不必要的指针,为什么不简单地:

Sum num1(17);
Sum num2(9);
int result = num1 + num2;

如果您出于某种原因认为要使用指针,则需要取消引用它们以添加它们指向的值:

Sum* num1 = new Sum(17);
Sum* num2 = new Sum(9);

int result = *num1 + *num2;

因为运算符是在 class 中定义的,所以它的左侧必须是 Sum 类型,右侧必须是 Sum* 类型(因为这是参数 d1).

不过,您尝试在此处添加两个指针:

int result = num1 + num2;

正确的做法是取消对左侧的引用

//           V
int result = *num1 + num2;

更好的方法是使用引用作为右侧参数来重载运算符,并且根本不使用 new (在现代 C++ 中你真的不需要使用 new ).

//             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;
}