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

Модераторы: Hawk, Romeo, Absurd, DeeJayC, WinMain

Ответить
shilovec5377
Сообщения: 8
Зарегистрирован: 16 июн 2014, 15:50

Всем привет.
Подскажите как можно сделать корректировку:
корректировка полей минут и часов выполняется только в случае переполнения поля секунд и/или минут соответственно

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

Код: Выделить всё

#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;
}
Аватара пользователя
Romeo
Сообщения: 3126
Зарегистрирован: 02 мар 2004, 17:25
Откуда: Крым, Севастополь
Контактная информация:

На пвесдокоде:

Код: Выделить всё

Инкремент Секунды;
Если (Секунды равны 60)
{
   Секунды = 0:
   Инкремент Минуты;
   Если (Минуты равны 60)
   {
      Минуты = 0;
      Инкремент Часы;
   }
}
Декремент предлагаю додумать самому. Принцип тот же.

И ещё замечание. Зря ты в постфиксной форме вызываешь префиксную. Вообще-то это не одно и то же. Если разницы не знаешь - дай знать, уточню.
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
Аватара пользователя
WinMain
Сообщения: 929
Зарегистрирован: 14 янв 2005, 10:30
Откуда: Москва
Контактная информация:

Можешь посмотреть реализацию уже имеющегося класса CTime из библиотеки ATL.
Для этого открой заголовочный файл atltime.h
Вот небольшой пример использования этого класса...

Код: Выделить всё

#include "stdafx.h"
#include <atltime.h>
#include <iostream>
#include <locale.h>

using namespace std;

LPCSTR lc = setlocale(LC_ALL, "russian");

ostream& operator<<(ostream& os, const CTime& ct)
{
	os << ct.GetHour() << ":" << ct.GetMinute() << ":" << ct.GetSecond();
	return os;
}

int _tmain(int argc, _TCHAR* argv[])
{
	CTime ct = CTime::GetCurrentTime();

	cout << "Текущее время " << ct << endl;

	cout << "Инкремент " << ct + 1 << endl;

	cout << "Декремент " << ct + -1 << endl;

	_gettch();

	return 0;
}
Ответить