【问题标题】:Is the return type wrong?返回类型是否错误?
【发布时间】:2018-08-04 05:02:09
【问题描述】:
#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& 的形式。谁能给我解释一下这是什么意思?

【问题讨论】:

  • return b(b.num); 不对。应该是return b;。这是您看到错误的地方吗?
  • 如果要重载一元减号,则为operator-(),不带参数;操作数是this
  • operator-() 没有必要返回引用。它通常按值返回是合适的,因为表达式a - b 给出的结果既不是a 也不是b。通常有一个好处(对于二进制 operator-()),第二个操作数由 const 引用传递 - 但这不是你要问的。

标签: c++ return operator-overloading


【解决方案1】:

您错误地声明了一元 operator-operator- 有两种变体:unarybinary。由于this 隐含在operator- 的左侧,所以一元运算符不需要参数,而二元运算符需要一个参数在右侧。因此,您声明了二进制 operator-。请尝试如下方式

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

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        【解决方案4】:
        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);
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2021-04-15
          • 1970-01-01
          • 2019-05-27
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2022-12-08
          • 1970-01-01
          相关资源
          最近更新 更多