返回类型有误吗?

Is the return type wrong?

本文关键字:返回类型      更新时间:2023-10-16
#include<iostream>
using namespace std;
class binary
{
protected:
int num;
public:
binary(int a)
{
num=a;
}
binary operator - (binary b1)
{
binary b(0);
b.num=~(b1.num-1);
return b(b.num);
}
void display()
{
cout<<"Negative is: "<<num;
}
};
int main()
{
int a;
cout<<"Enter no.: ";
cin>>a;
binary b(a);
binary b1=-b;
b1.display();
}

在上面的程序中,它表明重载运算符的返回类型应该是 int&。谁能向我解释一下这意味着什么?

返回类型是错误的吗?是的,返回b(b.num);是错误的,它应该只返回对象b

你正在使用member function重载unary减号,它应该有零参数,因为member functionthis指针,你可以使用这个指针来获取类data member

binary operator - () 
{
binary b(0);
b.num = ~(this-> num-1);
return b;
}

您不正确地声明了一元operator-operator-有两种变体:一元二元。由于this隐式地在operator-的左手,一元运算符不需要参数,而二进制在右手需要一个参数。因此,您声明了二进制operator-。请尝试以下操作

binary operator - ()
{
return binary(~(num-1));
}
binary operator-(binary b1) { ... }

定义两个类型为binary的对象之间的二进制-运算符。

为了能够使用

binary b1=-b;

您需要重载一元-运算符。这可以使用:

binary operator-() { ... }

我怀疑你想实现一元-运算符。您的实现可以使用this而不是b1。我建议将成员函数const,因为它不会修改this对象。

binary operator-() const
{
binary b(~(this->num-1));
return b;
}

这也将允许您使用:

binary b1 = -binary(10);

因为你必须解析整数值但正如代码中给出的返回 b(b.num) 取而代之的是"返回 B"。