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;
}
我想 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;
}