C++ 为什么不是';我的课堂教学方法&x27;s if语句不修改私有变量时间变量
这基本上是一个时间程序,应该输出良好。。。时间(来自输入)。它应该有溢出检查器,基本上检查分/秒是否在60以上,然后在整数分钟或整数小时中加1。目前,它不想这样做,并输出“时间:1:3:13”,这是不正确的C++ 为什么不是';我的课堂教学方法&x27;s if语句不修改私有变量时间变量,c++,class,C++,Class,这基本上是一个时间程序,应该输出良好。。。时间(来自输入)。它应该有溢出检查器,基本上检查分/秒是否在60以上,然后在整数分钟或整数小时中加1。目前,它不想这样做,并输出“时间:1:3:13”,这是不正确的 class Time { private: int seconds; int minutes; int hours; Time() { hours = 0; minut
class Time {
private:
int seconds;
int minutes;
int hours;
Time() {
hours = 0;
minutes = 0;
seconds = 0;
}
public:
Time(int hours, int minutes, int seconds) {
add(hours, minutes, seconds);
}
void add(int hours, int minutes, int seconds) {
int secOverflow = (int)floor(seconds / 60);
int minOverflow = (int)floor(minutes / 60);
if (seconds > 60) {
this->minutes += secOverflow;
}
this->seconds = seconds % 60;
if (minutes > 60) {
this->hours += minOverflow;
}
this->minutes = minutes % 60;
this->hours = hours % 24;
}
void printTime() {
std::cout << "Time : " << hours << ":" << minutes << ":" << seconds << std::endl;
}
};
int main() {
Time Clock(28, 70, 80); // should result 05:11:20
Clock.add(25, 63, 73);
Clock.printTime();
return 0;
}
}
上课时间{
私人:
整数秒;
整数分钟;
整小时;
时间(){
小时=0;
分钟=0;
秒=0;
}
公众:
时间(整数小时、整数分钟、整数秒){
添加(小时、分钟、秒);
}
无效添加(整数小时、整数分钟、整数秒){
整数秒溢出=(整数)楼层(秒/60);
内部最小溢流=(内部)楼层(分钟/60);
如果(秒>60){
此->分钟+=秒溢出;
}
此->秒=秒%60;
如果(分钟>60){
这->小时+=最小流量;
}
此->分钟=分钟%60;
此->小时数=小时数%24;
}
无效打印时间(){
标准::cout
- 整数之间的除法被截断,因此您不需要
下限
=+
是=
和+
的组合。若要分配加法结果,应使用+=
- 分配将消除以前分配的内容,因此应在分配后进行添加
试试这个:
void add(int hours, int minutes, int seconds) {
this->seconds = seconds % 60;
int minutes_temp = minutes + seconds / 60;
this->minutes = minutes_temp % 60;
this->hours = (hours + minutes_temp / 60) % 24;
}
(这个函数看起来更像set
而不是add
,但我现在尊重原始名称)
或者,如果您想实际添加时间:
void add(int hours, int minutes, int seconds) {
int seconds_temp = this->seconds + seconds;
int minutes_temp = this->minutes + minutes + seconds_temp / 60;
int hours_temp = this->hours + hours + minutes_temp / 60;
this->seconds = seconds_temp % 60;
this->minutes = minutes_temp % 60;
this->hours = hours_temp % 24;
}
在本例中,现在是构造函数
Time(int hours, int minutes, int seconds) {
add(hours, minutes, seconds);
}
将在不初始化成员的情况下进行添加
可以使用如下委托构造函数初始化成员:
Time(int hours, int minutes, int seconds) : Time() {
add(hours, minutes, seconds);
}
现在结果是时间:7:15:33,这对我来说很合理。我不明白为什么结果应该是11:17:33
整数之间的除法被截断,因此您不需要下限
=+
是=
和+
的组合。若要分配加法结果,应使用+=
分配将消除以前分配的内容,因此应在分配后进行添加
试试这个:
void add(int hours, int minutes, int seconds) {
this->seconds = seconds % 60;
int minutes_temp = minutes + seconds / 60;
this->minutes = minutes_temp % 60;
this->hours = (hours + minutes_temp / 60) % 24;
}
(这个函数看起来更像set
而不是add
,但我现在尊重原始名称)
或者,如果您想实际添加时间:
void add(int hours, int minutes, int seconds) {
int seconds_temp = this->seconds + seconds;
int minutes_temp = this->minutes + minutes + seconds_temp / 60;
int hours_temp = this->hours + hours + minutes_temp / 60;
this->seconds = seconds_temp % 60;
this->minutes = minutes_temp % 60;
this->hours = hours_temp % 24;
}
在本例中,现在是构造函数
Time(int hours, int minutes, int seconds) {
add(hours, minutes, seconds);
}
将在不初始化成员的情况下进行添加
可以使用如下委托构造函数初始化成员:
Time(int hours, int minutes, int seconds) : Time() {
add(hours, minutes, seconds);
}
现在的结果是时间:7:15:33
,这对我来说很合理。我不明白为什么结果应该是11:17:33
,似乎你想用+=
而不是=+
(=/code>和+
的组合)我改变了它,同样的输出为什么结果应该是11:17:33
?检查所有的运算符。你计算分钟数this->minutes+=secOverflow;
,然后用this->seconds=seconds%60;
覆盖它。这可能不是你想要的。意识到这是一个个人数学错误似乎你想要使用+=
而不是=+
(=
和+
的组合)我改变了它,同样的输出为什么结果应该是11:17:33
?检查所有的操作符。你计算分钟数this->minutes+=secOverflow;
,然后用this->seconds=seconds%60;
覆盖它。这可能不是你想要的。意识到这是一个个人数学错误很可能是一个数学错误很可能是我的数学错误