Premièrement, vous devez décider si le temps est une chose. Cela ne semble pas être dans votre exemple. Ce que vous voulez au lieu d'un objet est une fonction, qui est une meilleure représentation d'une «action» que vous effectuez sur les «choses». Votre constructeur ne semble opérer que sur des variables que vous leur passez par valeur (c'est-à-dire aucune variable membre, aucune référence), ce qui nous amène au second point: toute modification apportée aux paramètres ne sera visible que localement. Vous devez passer par référence ou les stocker quelque part (c'est-à-dire les variables membres). Troisièmement: vous voulez mettre en cascade vos changements de plus petites à plus grandes unités de temps, de sorte que vous ne devez emballer chacune d'entre elles qu'une seule fois.
Dans cet esprit, votre fonctionnalité mise en œuvre en fonction des paramètres passés par référence:
#include <cassert>
void ValidateTime(int& hours, int& minutes, int& seconds, int& ms)
{
assert(ms >= 0);
assert(seconds >= 0);
assert(minutes >= 0);
assert(hours >= 0);
int add_seconds = ms/1000;
ms %= 1000;
seconds += add_seconds;
int add_minutes = seconds/60;
seconds %= 60;
minutes += add_minutes;
int add_hours = minutes/60;
minutes %= 60;
hours += add_hours;
// TODO: exercise for the reader: roll your hours into days.
}
Exemple d'utilisation:
int main()
{
int hours = 1;
int minutes = 125;
int seconds = 63;
int ms = 54100;
ValidateTime(hours, minutes, seconds, ms);
std::cout << "hours: " << hours << ", minutes: " << minutes << ", seconds: " << seconds << ", ms: " << ms;
}
Prints hours: 3, minutes: 6, seconds: 57, ms: 100
Il y a un opérateur de module en C++. ... – StoryTeller
Je suis familier avec cela, mais je ne pense pas que cela aide dans cette situation. –
De quel type d'aide avez-vous besoin avec la section commentée? Y at-il une entrée qui n'est pas correctement gérée par la fonction telle quelle? –