• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

    На последнюю неделю приходится экзамен, где нужно будет показать свои навыки, взломав ряд уязвимых учебных сайтов, и добыть флаги. Успешно сдавшие экзамен получат сертификат.

    Запись на курс до 25 апреля. Получить промодоступ ...

Реализовать класс time, который содержит три поля типа int

  • Автор темы shilovec5377
  • Дата начала
S

shilovec5377

Всем привет. Условие задачи:
Реализовать класс Time, который содержит три поля типаint, предназначенные для хранения часов, минут и секунд. Перегрузить операцииввода–выводав поток, которые работают с объектами данного класса в следующем формате: ЧЧ:ММ:СС. Перегрузить операторы инкремента(++) и декремента(--), которые работают в обеих формах: префиксной и постфиксной. Увеличение или уменьшение времени выполнять для поля секунд, корректировка полей минут и часов выполняется только в случае переполнения поля секунд и/или минут соответственно. В функцииmain привести примеры реализации классаTime.

Подскажите как можно сделать корректировку:
корректировка полей минут и часов выполняется только в случае переполнения поля секунд и/или минут соответственно
C++:
#include <iostream>
#include <windows.h>
using namespace std;
 
 
class Time {
	int m_Hours;
	int m_Minutes;
	int m_Seconds;
 
 
public:
 
 
	Time()// конструктор по умолчанию который 
	{
		m_Hours = 0;
		m_Minutes = 0;
		m_Seconds = 0;
 
 
	}
 
 
	Time(const int &hours, const int &minutes, const int &seconds) {
		m_Hours = hours;
		m_Minutes = minutes;
		m_Seconds = seconds;
 
 
	}
	void ShowTime()
	{
		cout << m_Hours << " : " << m_Minutes << " : " << m_Seconds << endl;
	}
 
 
	// префиксная форма
	int operator++()
	{
		return (*this).m_Seconds++;
	}
 
 
	int operator--()
	{
		return (*this).m_Seconds--;
	}
 
 
	// постфиксная форма
	int operator++(int)
	{	   
		return ++(*this).m_Seconds;
	}
 
 
	int operator--(int)
	{
		return  --(*this).m_Seconds;
	}
 
 
	ostream &operator<<(ostream &out)
	{
		cout << "\nFrom overload << operator: ";
		out << (*this).m_Hours << ":" << (*this).m_Minutes << ":" << (*this).m_Seconds;
		return out;
	}
 
 
	istream &operator>>(istream &in)
	{
		cout << "\nEnter hours: ";
		cin >> (*this).m_Hours;
		cout << "Enter minutes: ";
		cin >> (*this).m_Minutes;
		cout << "Enter secods: ";
		cin >> (*this).m_Seconds;
		return in;
	}
 
 
};
 
 
int main(void) {
	Time time(12, 32, 12);
	time.ShowTime();
	time++;
	time.ShowTime();
	time--;
	time.ShowTime();
	++time;
	time.ShowTime();
	--time;
	time.ShowTime();
	time << cout;
	time >> cin;
	time.ShowTime();
	system("pause");
	return 0;
}
 
R

rrrFer

Ну сейчас я так понимаю корректировка вообще не выполняется.

В операторах ++ и -- у вас может получиться отрицательное число секунд или скажем 61 секунда.

Поэтому нужны дополнительные корректировки типа:

C++:
if (sec >= 60) {
  min += sec/60;
  sec %= 60;
}
if (min >= 60) {
  hours += min/60;
  min %= 60;
}

С минутами аналогично.
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!