首页 > 解决方案 > 具有多个属性的预定义运算符

问题描述

我是 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<< 但我不明白如何正确预定义它。有人可以告诉我它应该是什么样子。谢谢!

标签: c++

解决方案


您需要在您的类之外定义一个 operator<<,它将 std::ostream 作为左侧参数,将您自己的 Num 类作为右侧参数。

如何正确重载 ostream 的 << 运算符?


推荐阅读