我正在尝试实现一个时间类,它设置时间,打印它并增加一秒钟。我想通过重载++运算符来实现它,并且只有在参数列表中定义参数时它才能正常工作。如何在不定义任何参数的情况下使其工作,因为我知道它将当前时间增加一秒而且我不需要任何参数?
#include <iostream>
using namespace std;
class time
{
int h,m,s;
public:
time(int a, int b, int c);
void printtime();
time& operator++(int);
};
[...]
time& time::operator++(int x)
{
s++;
if (s>59) {
m++;
s -= 60;
if (m>59) {
h++;
m -= 60;
if (h>23) {
h = m = s = 0;
}
}
}
return *this;
}
int main()
{
try {
time now(22,58,59);
now.printtime();
now++;
now.printtime();
}
catch(const char* u) {
cout << u << endl;
}
return 0;
}
另外,我需要实现postfix运算符,这会增加时间,但只能在打印旧时间之后,以便
time now(2,23,59);
(now++).printtime();
将打印2:23:59,但之后现在的值将是3,0,0。如何实现前缀和后缀++运算符,并在main函数中调用它们时有所作为呢?
答案 0 :(得分:3)
问题是有两个叫做++的运算符。一个是预增量,一个是后增量。
为了区分它们,C ++的创建者认为后增量版本需要&#34; int&#34;参数。它没有被使用,但它需要在那里,否则它是一个预增量运算符。
如果要删除参数,可以像这样使用它:
++now;
此外,后增量版本确实需要返回结构的COPY,其状态与增量之前的状态相同。这是运营前和运营后的主要区别。实现pre运算符要简单得多,所以如果你需要它,那就是你应该使用的。
为了完整性,以下是运算符以及如何为类T编写它们:
T& T::operator++(); [pre-increment]
T& T::operator--(); [pre-decrement]
T T::operator++(int); [post-increment]
T T::operator--(int); [post-decrement]
请注意,预版本返回对对象的引用,而post-version返回副本(不是引用)。该副本应包含增量/减量之前的值。