具有多个属性的预定义运算符

时间:2019-06-07 09:22:36

标签: c++

我是C ++的新手,需要作业方面的帮助。

创建一个Num类,其对象包含一个双精度值。可以将此值输出到流出。为该类重新定义算术运算符“ +”和“-”,以便当一个操作数为int类型时,该对象仅涉及其值的整个部分。例如

  Num x(5.5);
  cout<<"x="<<x<<endl;// return 5.5
  int a=2; double b=2.5;
  cout<<"a+x="<<a+x<<endl;// return 7
  cout<<"x+a="<<x+a<<endl;// return 7
  cout<<"b+x="<<b+x<<endl;// return 8
  cout<<"x+b="<<x+b<<endl;// return 8

那是我的代码:

class Num
{
    double _num;
    public: Num(double n) : _num(n) {};

    double operator+(double b)
    {
        if ( (_num - (int)_num) == 0 ||  (b - (int)b) == 0) {
            return (int)_num + (int)b;
        } else {
            return _num + b;
        }
    }

    double operator-(double b)
    {
        if ( (_num - (int)_num) == 0 ||  (b - (int)b) == 0) {
            return (int)_num - (int)b;
        } else {
            return _num - b;
        }
    }
};
int main()
{
    Num x(5.5);
    cout<<"x="<<x<<endl;// return 5.5

    int a=2;
    double b=2.5;

    //cout<<"a+x="<<a+x<<endl;// return 7
     cout<<"x+a="<<x+a<<endl;// return 7
     cout<<"x+b="<<x+b<<endl;// return 8
     cout<<"b+x="<<b+x<<endl;// return 8 // I am receiving the error here
    // cout<<"a+b="<<a+b<<endl;// return 8
    //cout<<"b+x="<<b+x<<endl;// return 8
    //cout<<"x+b="<<x+b<<endl;// return 8

    return 0;
}

我知道我要使用operator <<,但是我不知道如何正确预定义它。有人可以告诉我它的外观吗。谢谢!

1 个答案:

答案 0 :(得分:6)

您需要在类外部定义一个运算符<<,该操作符将std :: ostream作为左侧参数,将您自己的Num类用作右侧。

How to properly overload the << operator for an ostream?