Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> реализовать класс Time 
:(
    Опции темы
shilovec5377
  Дата 6.6.2015, 16:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 43
Регистрация: 15.5.2013

Репутация: нет
Всего: нет



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

Сам класс и вывод времени есть. Как Перегрузить операцииввода–выводав поток, которые работают с объектами данного класса в следующем формате: ЧЧ:ММ:СС.???
Код

#include <iostream>
 
class Time
{
    int m_Hours;
        int m_Minutes;
        int m_Seconds;
 
public: 
         Time()// конструктор по умолчанию который 
   {
         m_Hours=0;
         m_Minutes=0;
         m_Seconds=0;
       
   }
      Time(int hours , int minutes, int seconds)
   {
         m_Hours=hours;
         m_Minutes=minutes;
         m_Seconds=seconds;
       
   }
 
   void ShowTime()
  {
      cout<<m_Hours<<" : "<< m_Minutes<<" : "<< m_Seconds<<endl;
  }
};
 
using namespace std;
 
int main(void)
{
    setlocale(LC_CTYPE, "Russian");
    // ваши действия 
 
    cout << endl;
    system("pause");
    return 0;
}

PM MAIL   Вверх
shilovec5377
Дата 6.6.2015, 22:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 43
Регистрация: 15.5.2013

Репутация: нет
Всего: нет



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

#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;
}

PM MAIL   Вверх
baldina
Дата 6.6.2015, 23:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3433
Регистрация: 5.12.2007
Где: Москва

Репутация: 15
Всего: 101



в  operator++, -- введите проверку: если число секунд/минут больше 60/меньше 0, то установить их в 0 и увеличить/уменьшить минуты/часы на 1
PM MAIL   Вверх
shilovec5377
  Дата 6.6.2015, 23:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 43
Регистрация: 15.5.2013

Репутация: нет
Всего: нет



 что-то вроде этого или я не так понял?
 int operator++()
    {
        if (m_Seconds>60) m_Seconds=0,m_Seconds++  ;
        return (*this).m_Seconds++;
    }
 
PM MAIL   Вверх
baldina
Дата 7.6.2015, 00:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3433
Регистрация: 5.12.2007
Где: Москва

Репутация: 15
Всего: 101



Код

Time& operator++() {
  ++m_Seconds;
  if (m_Seconds>60) { 
    ++m_Minutes;
    if (m_Minutes>60) {
      ++m_Hours;
      m_Minutes=0;
    }
    m_Seconds=0;
  }
  return *this;
}

альтернатива - хранить значения в массиве
Код

int frac[3]; // hours, minutes, seconds
int limit[3]={24,60,60};
void increase (size_t i) {
  if (i<0) return;
  ++frac[i];
  if (frac[i]>limit[i]) {
     increase(i-1);
     frac[i]=0;
  }
}
Time& operator++() {
  increase(2);
  return *this;
}

PM MAIL   Вверх
shilovec5377
Дата 7.6.2015, 00:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 43
Регистрация: 15.5.2013

Репутация: нет
Всего: нет



Мне это же и в оператор --  нужно прописать?

Код

  Time& operator++() {
  ++m_Seconds;
  if (m_Seconds>60) { 
    ++m_Minutes;
    if (m_Minutes>60) {
      ++m_Hours;
      m_Minutes=0;
    }
    m_Seconds=0;
  }
  return *this;
}


PM MAIL   Вверх
baldina
Дата 7.6.2015, 23:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3433
Регистрация: 5.12.2007
Где: Москва

Репутация: 15
Всего: 101



 smile по тому же принципу
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0487 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.