Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 06.06.2015, 16:37   #1
shilovec5377
Форумчанин
 
Аватар для shilovec5377
 
Регистрация: 29.06.2011
Сообщений: 117
Восклицание реализовать класс Time который содержит три поля типа int

Всем привет. Помогите пожалуйста с условием: Реализовать класс 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 вне форума Ответить с цитированием
Старый 06.06.2015, 17:01   #2
RAFA91
Заблокирован
 
Регистрация: 06.02.2011
Сообщений: 1,999
По умолчанию

Код:
class Time

{

friend ostream & operator << (ostream &, const Time &);

};

ostream & operator << (ostream & output, const Time & fgh)

{

    output << "\n" << fgh.m_Hours << ":" << fgh.m_Minutes << ":" << fgh.m_Seconds << endl;

	return output;
}

Последний раз редактировалось RAFA91; 06.06.2015 в 17:05.
RAFA91 вне форума Ответить с цитированием
Старый 06.06.2015, 21:27   #3
shilovec5377
Форумчанин
 
Аватар для shilovec5377
 
Регистрация: 29.06.2011
Сообщений: 117
По умолчанию

Подскажите как можно сделать корректировку:
Цитата:
корректировка полей минут и часов выполняется только в случае переполнения поля секунд и/или минут соответственно
Код:
#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;
}

Последний раз редактировалось shilovec5377; 06.06.2015 в 21:57.
shilovec5377 вне форума Ответить с цитированием
Старый 07.06.2015, 09:45   #4
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,330
По умолчанию

Цитата:
Сообщение от shilovec5377 Посмотреть сообщение
Подскажите как можно сделать корректировку:
После увеличения секунд проверить, не стало ли количество секунд равным 60 и если да, то сбросить секунды и увеличить минуты, с аналогичной проверкой.

При операции уменьшения проверку надо делать до вычитания, а не после.

Кстати, результатом операции увеличения/уменьшения должен быть класс Time а не int.
waleri вне форума Ответить с цитированием
Старый 08.06.2015, 11:04   #5
RAFA91
Заблокирован
 
Регистрация: 06.02.2011
Сообщений: 1,999
По умолчанию

Код:
out << (*this).m_Hours << ":" << (*this).m_Minutes << ":" << (*this).m_Seconds;
зачем тулишь this?

Код:
out <<m_Hours << ":" << m_Minutes << ":" << m_Seconds;
___________________________________ ________________________

немного подправил твой класс

Код:

#include <iostream>
#include <windows.h>

using namespace std;

class Time

{
	int m_Hours;
       
        int m_Minutes;
       
        int m_Seconds;

public:

	Time(int hours , int minutes, int seconds) : 

        m_Hours(hours), m_Minutes(minutes), m_Seconds(seconds) {} 

	~Time()  {}

	Time(const Time &rhs) :  

        m_Hours(rhs.m_Hours), m_Minutes(rhs.m_Minutes), m_Seconds(rhs.m_Seconds) {} 

	Time & operator = (const Time & rhs)

	{
               if(this == & rhs) return *this;

                m_Hours = rhs.m_Hours;

                m_Minutes = rhs.m_Minutes;

                m_Seconds = rhs.m_Seconds;

		return *this;
	}

	Time & operator ++ ()

	{
               m_Seconds ++;
                
                if(m_Seconds >= 60)

                {
                   m_Seconds = 0;
                   
                   m_Minutes ++;

                   if(m_Minutes >= 60)

                   {
                      m_Minutes = 0;

                      m_Hours ++;

                      if(m_Hours >= 24) m_Hours = 0;
                   }
                }
          
                return *this;
	}

	Time operator ++ (int) // постфиксный

	{
		Time temp(*this);
		
                m_Seconds ++;
                
                if(m_Seconds >= 60)

                {
                   m_Seconds = 0;
                   
                   m_Minutes ++;

                   if(m_Minutes >= 60)

                   {
                      m_Minutes = 0;

                      m_Hours ++;

                      if(m_Hours >= 24) m_Hours = 0;
                   }
                }
		
		return temp;
	}

	Time & operator -- ()

	{
                
                m_Seconds --;
                
                if(m_Seconds < 0)

                {
                   m_Seconds = 59;
                   
                   m_Minutes --;

                   if(m_Minutes < 0)

                   {
                      m_Minutes = 59;

                      m_Hours --;

                      if(m_Hours < 0) m_Hours = 23;
                   }
                }

		return *this;
	}

	Time operator -- (int) // постфиксный

	{
		Time temp(*this);
		
		 m_Seconds --;
                
                if(m_Seconds < 0)

                {
                   m_Seconds = 59;
                   
                   m_Minutes --;

                   if(m_Minutes < 0)

                   {
                      m_Minutes = 59;

                      m_Hours --;

                      if(m_Hours < 0) m_Hours = 23;
                   }
                }
		
		return temp;
	}

        void ShowTime()
	{
		cout << m_Hours << " : " << m_Minutes << " : " << m_Seconds << endl;
	}

};

Последний раз редактировалось RAFA91; 08.06.2015 в 12:32.
RAFA91 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
time(0)*1000 не вмещается в long int DakotaZ Общие вопросы C/C++ 7 20.08.2014 17:06
Массив. Класс с именем NOTE содержит следующие поля: MrRuslanBB Помощь студентам 0 12.03.2013 02:12
Класс запускает поток, который заполняет этот класс. Обмен класс <=> поток. Человек_Борща Общие вопросы Delphi 8 27.02.2012 23:24
Реализовать обьект в Delphi, который содержит в качестве поля двумерный массив данных. Nastena_12_ Помощь студентам 0 06.12.2009 22:17
Есть таблица - В ней три поля int, char, char нужно чтобы данные заносились в таблицу Mysql Muahahaha PHP 8 27.03.2008 11:17