重载运算符>>,将一个参数传递给对象而不是三个
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);
你可以这样做:
- 如您打印的评论所建议的那样,于 0 退出
- 去掉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 以递增)。
我有一个日期类型的对象 "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);
你可以这样做:
- 如您打印的评论所建议的那样,于 0 退出
- 去掉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 以递增)。