Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/8: Рейтинг темы: голосов - 8, средняя оценка - 5.00
shilovec5377
30 / 55 / 12
Регистрация: 26.05.2011
Сообщений: 755
1

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

06.06.2015, 17:50. Просмотров 1623. Ответов 18
Метки нет (Все метки)

Всем привет. Помогите пожалуйста с условием:
Реализовать класс Time, который содержит три поля типаint, предназначенные для хранения часов, минут и секунд. Перегрузить операцииввода–выводав поток, которые работают с объектами данного класса в следующем формате: ЧЧ:ММ:СС. Перегрузить операторы инкремента(++) и декремента(--), которые работают в обеих формах: префиксной и постфиксной. Увеличение или уменьшение времени выполнять для поля секунд, корректировка полей минут и часов выполняется только в случае переполнения поля секунд и/или минут соответственно. В функцииmain привести примеры реализации классаTime.
Сам класс и вывод времени есть. Как Перегрузить операцииввода–выводав поток, которые работают с объектами данного класса в следующем формате: ЧЧ:ММ:СС.???
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
#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;
}
0
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.06.2015, 17:50
Ответы с готовыми решениями:

Создайте класс time, содержащий три поля, предназначенные для хранения часов, минут и секунд
Создайте класс с именем time, содержащий три поля типа int, предназначенные для хранения часов,...

Не могу разобраться с заданием "Создайте класс Time с конструкторами Time(), Time( int hour)......"
/* Создайте класс Time с конструкторами Time(), Time( int hour), Time(int hour, int min),...

Создайте класс employee, который содержит имя (объект класса string) и номер (типа long) служащего
Создайте класс employee, который содержит имя (объект класса string) и но- мер (типа long)...

Cоздать перегруженный класс max, который ищет минимальное значение из двух или трех чисел типа int
помогите пожалуйста написать программу. нужно создать перегруженный класс max, который ищет...

Написать класс, который эмулирует работу типа float. Реализовать метод А^В
привет ребят.выручайте. написать класс который эмулирует работу типа float. реализовать метод А^В

18
rikimaru2013
2515 / 1177 / 355
Регистрация: 30.11.2013
Сообщений: 3,787
06.06.2015, 17:58 2
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
#include <iostream>
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;
    }
    int hour() const
    {
        return m_Hours;
    }
    int minutes() const
    {
        return m_Minutes;
    }
    int seconds() const
    {
        return m_Seconds;
    }
};
std::ostream& operator<<(ostream& os, const Time& time)
{
    cout << time.hour() << ":" << time.minutes() << ":" << time.seconds() << endl;
    return os;
}
 
 
int main(void)
{
    Time myTimer(14, 51, 31);
    cout << myTimer;
 
    system("pause");
    return 0;
}
1
zss
Модератор
Эксперт С++
8497 / 7494 / 4638
Регистрация: 18.12.2011
Сообщений: 19,828
Завершенные тесты: 1
06.06.2015, 17:59 3
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
#include <iostream>
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(int hours , int minutes, int seconds)
   {
         m_Hours=hours;
         m_Minutes=minutes;
         m_Seconds=seconds;
   }
 
   friend ostream& operator<<(osream& os,const Time& m);
   friend istream& operator>>(osream& os,Time&m);
};
 
 
 
ostream& operator<<(osream& os,const Time& m)
  {
      os<<m.m_Hours<<" : "<<m.m_Minutes<<" : "<< m.m_Seconds<<endl;
      return os;
  }
istream& operator>>(isream& is,Time&m)
  {
      is>>m.m_Hours>> m.m_Minutes>>m.m_Seconds;
      return os;
  }
int main(void)
{
    setlocale(LC_CTYPE, "Russian");
    // ваши действия 
    Time t;
    cin>>t;
    cout <<t<< endl;
    system("pause");
    return 0;
}
1
shilovec5377
30 / 55 / 12
Регистрация: 26.05.2011
Сообщений: 755
06.06.2015, 18:11  [ТС] 4
Это и будет перегрузка операции ввода-вывода?
0
06.06.2015, 18:11
zss
Модератор
Эксперт С++
8497 / 7494 / 4638
Регистрация: 18.12.2011
Сообщений: 19,828
Завершенные тесты: 1
06.06.2015, 19:29 5
rikimaru2013, Для ostream тоже допишете сеттеры на все закрытые члены класса?
Тогда, интересно, для чего их вообще надо было закрывать?
Наверное, вы считаете, что тег private не имеет права быть вообще!
1
Tulosba
:)
Эксперт С++
4751 / 3245 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
06.06.2015, 19:30 6
Цитата Сообщение от rikimaru2013 Посмотреть сообщение
C++
1
cout << time.hour() << ":" << time.minutes() << ":" << time.seconds() << endl; return os;
не cout, а os
Цитата Сообщение от zss Посмотреть сообщение
C++
1
ostream& operator<<(osream& os,Time&m)
Константность ссылки m потерялась. И в операторе ввода тоже опечатки, почти как у rikimaru2013.
2
shilovec5377
30 / 55 / 12
Регистрация: 26.05.2011
Сообщений: 755
06.06.2015, 19:58  [ТС] 7
Помогите пожалуйста по условию выполнить задание:
Реализовать класс Time, который содержит три поля типаint, предназначенные для хранения часов, минут и секунд. Перегрузить операцииввода–выводав поток, которые работают с объектами данного класса в следующем формате: ЧЧ:ММ:СС. Перегрузить операторы инкремента(++) и декремента(--), которые работают в обеих формах: префиксной и постфиксной. Увеличение или уменьшение времени выполнять для поля секунд, корректировка полей минут и часов выполняется только в случае переполнения поля секунд и/или минут соответственно. В функцииmain привести примеры реализации классаTime.
0
rikimaru2013
2515 / 1177 / 355
Регистрация: 30.11.2013
Сообщений: 3,787
06.06.2015, 20:01 8
Цитата Сообщение от zss Посмотреть сообщение
rikimaru2013, Для ostream тоже допишете сеттеры на все закрытые члены класса?
Для istream.
Да. Такие мои рекомендации. friend для педиков)
1
zss
Модератор
Эксперт С++
8497 / 7494 / 4638
Регистрация: 18.12.2011
Сообщений: 19,828
Завершенные тесты: 1
06.06.2015, 20:14 9
Открывать доступ к закрытым членам класса надо только в исключительных случаях,
когда это обусловлено идеологией класса.
Методы operator>> operator<< под такого рода идеологию не подпадают.
Они очень близки к классу, т.к. имеют доступ ко всем закрытым членам класса.
Их выносят во внешнюю функцию исключительно по той причине, что первым параметром методов является не ссылка на класс, а ссылка на поток.
0
shilovec5377
30 / 55 / 12
Регистрация: 26.05.2011
Сообщений: 755
06.06.2015, 21:56  [ТС] 10
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
#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;
}
Добавлено через 31 минуту
Подскажите как можно сделать корректировку:
корректировка полей минут и часов выполняется только в случае переполнения поля секунд и/или минут соответственно
0
rikimaru2013
2515 / 1177 / 355
Регистрация: 30.11.2013
Сообщений: 3,787
06.06.2015, 22:09 11
C++
1
2
3
4
int operator++(int)
    {
        return ++(*this).m_Seconds;
    }
0
shilovec5377
30 / 55 / 12
Регистрация: 26.05.2011
Сообщений: 755
06.06.2015, 22:13  [ТС] 12
чего так?
0
rikimaru2013
2515 / 1177 / 355
Регистрация: 30.11.2013
Сообщений: 3,787
06.06.2015, 22:15 13
вы в конструкторе присваиваете значение в класс-мемберы. А если ввести Time(24, 11, 11) или Timer(31, 62, 62) ? Вот это от вас требуют - решайте проблему

Добавлено через 30 секунд
Цитата Сообщение от shilovec5377 Посмотреть сообщение
чего так?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#include <iostream>
#include <string>
 
using namespace std;
class Foo
{
    int m_x;
public:
    Foo(int t)
    {
        m_x = t;
    }
 
    int operator++(int)
    {
        return ++(*this).m_x;
    }
    void show()
    {
        cout << m_x << endl;
    }
};
int main()
{
    Foo a(17);
    int y = a++;
 
    cout << y << endl;
    a.show();
 
}
0
shilovec5377
30 / 55 / 12
Регистрация: 26.05.2011
Сообщений: 755
06.06.2015, 22:17  [ТС] 14
подскажите в чем не прав, исправьте пожалуйста
0
rikimaru2013
2515 / 1177 / 355
Регистрация: 30.11.2013
Сообщений: 3,787
06.06.2015, 22:21 15
C++
1
2
3
4
int operator++(int)
    {
        return (*this).m_x++;
    }
0
Tulosba
:)
Эксперт С++
4751 / 3245 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
06.06.2015, 22:22 16
Постфиксная форма должна (по общепринятому соглашению) возвращать старое (не измененное) значение объекта. И поля класса всё же лучше инициализировать не в теле конструктора, а в инициализаторе конструктора.
0
rikimaru2013
2515 / 1177 / 355
Регистрация: 30.11.2013
Сообщений: 3,787
06.06.2015, 22:29 17
ну в данном случае ему лучше в теле через методы IsValid()
0
Tulosba
:)
Эксперт С++
4751 / 3245 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
06.06.2015, 22:30 18
Цитата Сообщение от rikimaru2013 Посмотреть сообщение
ну в данном случае ему лучше в теле через методы IsValid()
Для этого исключения придуманы, чтобы не проверять после каждого чиха IsValid().
0
rikimaru2013
2515 / 1177 / 355
Регистрация: 30.11.2013
Сообщений: 3,787
06.06.2015, 22:34 19
Исключения для
Цитата Сообщение от shilovec5377 Посмотреть сообщение
корректировка полей минут и часов
Ладно пусть ТС пишит исключения и инициализирует в списке-инициализации. Эх....
0
06.06.2015, 22:34
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.06.2015, 22:34

Напишите класс SafeArray который использует массив типа int фиксированного размера. В классе необходимо описать два мето
Напишите класс SafeArray который использует массив типа int фиксированного размера. В классе...

Разработать класс с именем Time содержащий три поля int для хранения часов, минут и секунд
Разработать класс с именем Time содержащий три поля int для хранения часов,минут и секунд. Один из...

Реализовать класс блок содержащий рубрики который содержит записи
Реализовать класс блок содержащий рубрики который содержит записи, записи содержат комментарии....


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
19
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru