Задача по С++, класс myTime, как реализовать корректировку даты нормально?

Помогите пожалуйста с кодом. home_task_7_overload_oper_wo_c_1592131369.pdf (72.2 КБ)
Не могу понять как реализовать корректировку времени нормально. Вот что я написал:
myTime.cpp

#include "myTime.h"

myTime::myTime(int h, int m, int s)
{
	/*if (h < 24 && h >= 0)*/ hours = h;
	/*if (m < 60 && m >= 0)*/ minutes = m;
	/*if (s < 60 && s >= 0)*/ seconds = s;
	if (seconds > 59)
	{
		seconds -= 60;
		minutes++;
	}
	if (minutes > 59)
	{
		minutes -= 60;
		hours++;
	}
	if (hours > 23)
	{
		hours -= 24;
	}
}
myTime::myTime():myTime(0,0,0)
{
}

int myTime::getHours() const
{
	return hours;
}

void myTime::setHours(int h)
{
	myTime::hours = h;
}

int myTime::getMinutes() const
{
	return minutes;
}

void myTime::setMinutes(int m)
{
	myTime::minutes = m;
}

int myTime::getSeconds() const
{
	return seconds;
}

void myTime::setSeconds(int s)
{
	myTime::seconds = s;
}

bool myTime::operator==(const myTime& obj) const
{
	return hours==obj.hours&&minutes==obj.minutes&&seconds==obj.seconds;
}

bool myTime::operator!=(const myTime& obj) const
{
	return !(*this == obj);
}

bool myTime::operator>(const myTime& obj) const
{
	return (hours * 3600 + minutes * 60 + seconds) >
		(obj.hours * 3600 + obj.minutes * 60 + obj.seconds);
}

bool myTime::operator<(const myTime& obj) const
{
	return (hours * 3600 + minutes * 60 + seconds) <
		(obj.hours * 3600 + obj.minutes * 60 + obj.seconds);
}

bool myTime::operator>=(const myTime& obj) const
{
	return (hours * 3600 + minutes * 60 + seconds) >=
		(obj.hours * 3600 + obj.minutes * 60 + obj.seconds);
}

bool myTime::operator<=(const myTime& obj) const
{
	return (hours * 3600 + minutes * 60 + seconds) <=
		(obj.hours * 3600 + obj.minutes * 60 + obj.seconds);
}

myTime myTime::operator+(const myTime& obj) const
{
	return myTime(hours+obj.hours,minutes+obj.minutes,seconds+obj.seconds);
}

myTime myTime::operator+(int val) const
{
	return myTime(hours, minutes, seconds+val);
}

myTime myTime::operator-(const myTime& obj) const
{
	return myTime(hours - obj.hours, minutes - obj.minutes, seconds - obj.seconds);
}

myTime myTime::operator-(int val) const
{
	return myTime(hours, minutes, seconds - val);
}

myTime& myTime::operator++(int) 
{
	myTime tmp(*this);
	this->seconds++;
	return *this;
}

myTime& myTime::operator--(int)
{
	myTime tmp(*this);
	this->seconds--;
	return *this;
}

void myTime::Show() const
{
	if (hours > 9)
		cout << hours;
	else
		cout << '0' << hours;
	cout << ':';

	if (minutes > 9)
		cout << minutes;
	else
		cout << '0' << minutes;
	cout << ':';

	if (seconds > 9)
		cout << seconds;
	else
		cout << '0' << seconds;
	cout << endl;
}

main.cpp

#include"myTime.h"
int main()
{
	myTime a(22, 9, 1);
	a.Show();
	myTime b(22, 59, 12);
	b.Show();
	cout << (a == b) << endl;
	cout << (a != b) << endl;
	cout << (a >= b) << endl;
	myTime c = a + b;
	c.Show();
	myTime d = c + 120;
	d.Show();
	cout << (a > b) << endl;
	a--;
	a.Show();
}

В этом коде вроде нормально только проверки <, >, <=, >=, !=, ==. Вроде бы работает myTime operator+(const myTime& obj) const;. А вот с остальным все плохо. Ну еще инкремент/декремент работает, если в минус не уходят значения

Тут нет дат. только время )

Что именно?

myTime:: тут вряд ли нужен.

Так нормализовать надо при любом изменении данных, а не только в конструкторе.

И еще это надо делать либо в цикле, либо как-то вычислять сразу (остаток, …), иначе что будет если например 123 секунды?


Вообще тут не очень понятно какая логика должна быть. Создать объект со странными значениями типа 48:123:86 (или 48:-123:-86) и надеяться получить что-то полезное — странно :slight_smile: . Даже опасно в реальной программе, может привести к трудноловимым ошибкам где-нибудь сильно позже, лучше получить ошибку (Exception, …) сразу.

QTime из Qt например устанавливается в некое Null значение при некорректных данных:
https://code.woboq.org/qt5/qtbase/src/corelib/time/qdatetime.cpp.html#1984
(и там есть функции isNull, isValid)

Можно только прибавлять/отнимать секунды неограниченно, что логично:
https://doc.qt.io/qt-5/qtime.html#addSecs

QTime n(14, 0, 0);                // n == 14:00:00
QTime t;
t = n.addSecs(70);                // t == 14:01:10
t = n.addSecs(-70);               // t == 13:58:50
t = n.addSecs(10 * 60 * 60 + 5);  // t == 00:00:05
t = n.addSecs(-15 * 60 * 60);     // t == 23:00:00

А деструктор нужно обязательно прописывать в классе?

Если есть что освобождать. Например, если в конструкторе создается массив/объект через new.

Спасибо, вы как всегда помогли)