• Познакомьтесь с пентестом веб-приложений на практике в нашем новом бесплатном курсе

    «Анализ защищенности веб-приложений»

    🔥 Записаться бесплатно!

  • CTF с учебными материалами Codeby Games

    Обучение кибербезопасности в игровой форме. Более 200 заданий по Active Directory, OSINT, PWN, Веб, Стеганографии, Реверс-инжинирингу, Форензике и Криптографии. Школа CTF с бесплатными курсами по всем категориям.

Реализовать класс 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;
}

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

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