Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Для новичков > реализовать класс Time


Автор: shilovec5377 6.6.2015, 16:42
Всем привет. Помогите пожалуйста с условием: 
 Реализовать класс 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;
}

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

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

Автор: baldina 6.6.2015, 23:01
в  operator++, -- введите проверку: если число секунд/минут больше 60/меньше 0, то установить их в 0 и увеличить/уменьшить минуты/часы на 1

Автор: shilovec5377 6.6.2015, 23:10
 что-то вроде этого или я не так понял?
 int operator++()
    {
        if (m_Seconds>60) m_Seconds=0,m_Seconds++  ;
        return (*this).m_Seconds++;
    }
 

Автор: baldina 7.6.2015, 00:07
Код

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

Автор: shilovec5377 7.6.2015, 00:19
Мне это же и в оператор --  нужно прописать?

Код

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


Автор: baldina 7.6.2015, 23:14
 smile по тому же принципу

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)