重载运算符>>,将一个参数传递给对象而不是三个

overloading operator >>, passing one parameter to object instead of 3

我有一个日期类型的对象 "d"。我正在尝试使用重载运算符从用户那里只接受一个参数,而不是对象具有的三个参数。换句话说,我希望程序能够从用户那里获取输入并且能够只更改 "month_" 数据成员,然后将该数据成员传递给 "incMon()" 以便月份并且年份会根据用户希望仅使用 "month_" 数据成员增加日期的月份进行相应调整。

如何调整重载运算符和 incMon() 以允许此过程发生?

这就是我的。

void Date::read(istream & is)
    {
        unsigned month;

        is >> month;

        month_ = month;

    }


    istream & operator>>(istream & is, Date & d)
    {
        d.read(is);
        return is;
    }

重载的输入运算符 >> 应声明为友元:

friend istream & operator>>(istream & is, Date & d);

并在 class 块外定义如下:

istream & operator>>(istream & is, Date & d)
{
   is >> d.month_; // input the month only
   d.day_ = d.year_ = 0; 
   return is;
}

对于日和年的分配值,分配一些可接受的默认值以使日期对象在接受输入时完整 现在您的日期对象将根据需要从一个值中获取输入。 好吗?

int increment;
cout << "Enter month increment (0 to exit): " << endl;
cin >> increment;
if (increment == 0) {
   // your special exit stuff
}
d.incrementMonth(increment);

你可以这样做:

  1. 如您打印的评论所建议的那样,于 0 退出
  2. 去掉incrementMonth方法的第一个参数。 (改为使用 this 变量。)

我将原始问题解释为:"How to make the given main function work?"

侵入性最小的方式是

istream & operator>>(istream & is, Date & d)
{
   int num = 0;
   is >> num;
   d.incrementMonth(d, num);
   return is;
}

虽然我想强调,这个解决方案会导致相当意外的代码(读取对象与读取 int 以递增)。