【发布时间】:2019-04-16 09:58:13
【问题描述】:
我们在课堂上的一项任务是创建一个程序,该程序使用对象来显示小时、分钟和秒。有了这些数字,我们现在必须重载各种运算符,将秒/分钟增加 1,并使用 ++ 和 -- 减少它们。我在使用 -- 运算符时遇到了一些问题,因为它没有按预期工作,如果我输入 0 分钟,它会减少返回值的分钟数,例如 128 分钟。当我开始做这件事时,我真的很感激一些帮助。
然后第二部分是使用其他运算符 (> =
Main.cpp
#include <iostream>
#include "Time.h"
using namespace std;
int main() {
int hour1, minute1, second1, hour2, minute2, second2;
cout << "Enter time A (hh, mm, ss): ";
cin >> hour1;
cin >> minute1;
cin >> second1;
cout <<endl;
/*cout << "Enter time B(hh, mm, ss): ";
cin >> hour2;
cin >> minute2;
cin >> second;
cout <<endl;*/
Time T1(hour1, minute1, second1);
++T1; //Increases seconds by 1
T1.displayTime();
T1++; //Increases minutes by 1
T1.displayTime();
--T1; //Decreases seconds by 1
T1.displayTime();
T1--; //Decreases minutes by 1
T1.displayTime();
return 0;
}
时间.h
#ifndef TIME_H
#define TIME_H
class Time
{
public:
Time();
Time (int h, int m, int s);
void displayTime();
Time operator++();
Time operator++(int);
Time operator--();
Time operator--(int);
/*Time operator>();
Time operator<();
Time operator>=();
Time operator<=();
Time operator==();
Time operator!=();*/
private:
int hours;
int minutes;
int seconds;
};
#endif // TIME_H
时间.cpp
#include <iostream>
#include "Time.h"
using namespace std;
Time::Time(){
hours = 0;
minutes = 0;
seconds = 0;
}
Time::Time(int h, int m, int s){
hours = h;
minutes = m;
seconds = s;
}
void Time::displayTime(){
cout << "Hours: " << hours <<" Minutes: " << minutes << " Seconds: " <<seconds <<endl;
}
Time Time::operator++(){ //Prefix plus seconds
++seconds;
if (minutes >= 60){
++hours;
minutes -= 60;
}
if (seconds >= 60){
++minutes;
seconds -= 60;
}
return Time(hours, minutes, seconds);
}
Time Time::operator++(int){ //Postfix plus minutes
Time T(hours, minutes, seconds);
++minutes;
if(minutes >=60){
++hours;
minutes -= 60;
}
if (seconds >= 60){
++minutes;
seconds -= 60;
}
return T;
}
Time Time::operator--(){ //PREFIX MINUSS seconds
--seconds;
if (seconds == 0){
--minutes;
seconds += 59;
}
if (minutes == 0){
--hours;
minutes += 59;
}
return Time(hours, minutes, seconds);
}
Time Time::operator--(int){ //POSTFIX MINUSS minutes
Time T(hours, minutes, seconds);
--minutes;
if (minutes == 0){
--hours;
minutes += 59;
}
if (seconds == 0){
--minutes;
seconds += 59;
}
return T;
}
/*Time Time::operator>(){
}
Time Time::operator<(){
}
Time Time::operator>=(){
}
Time Time::operator<=(){
}
Time Time::operator==(){
}
Time Time::operator!=(){
}
*/
如果您发现任何其他错误,请告诉我。
因此,分钟数没有正确减去。似乎它只是从 0 开始,但没有增加必要的秒数(如果有意义的话)。
谢谢。
【问题讨论】:
-
请阅读minimal reproducible example 并删除代码中被注释掉的部分。这看起来像一堵巨大的代码墙,实际上并没有那么多
-
正如@user463035818 所说,您的示例可能是完整的,但远非最小。
-
你写了
Time::Time(int h, int m, int s){ hours = h; minutes = m; seconds = s; }- 这更好(使用初始化列表):Time::Time(int h, int m, int s) : hours(h), minutes(m), seconds(s) { } -
检查秒数或分钟数是否超过
60的方式远非最佳。使用除法、模数和正确的排序(秒优先,然后是分钟等)。 -
您应该先增加分钟数,然后再增加小时数。
标签: c++ oop operator-overloading overloading