返回类型错了吗?

时间:2018-02-24 05:30:31

标签: c++ return operator-overloading

#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&amp;形式。任何人都可以向我解释这意味着什么?

4 个答案:

答案 0 :(得分:1)

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

你使用unary重载member function减去它,因为member functionthis指针,它应该为零参数,你可以用这个指针得到data member上课。

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

答案 1 :(得分:1)

您未正确宣布一元operator-operator-有两种变体:一元二进制。由于this隐含在operator-的左侧,因此一元运算符不需要参数,二元需要右侧的一个参数。因此,您声明了二进制文件operator-。请尝试以下

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

答案 2 :(得分:0)

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);

答案 3 :(得分:0)

因为您必须解析整数值 但是在代码返回b(b.num)中给出 而不是它应该是“返回b”。