Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Kopylov
1 / 1 / 0
Регистрация: 22.09.2013
Сообщений: 21
#1

Перегрузка операторов класса время - C++

08.03.2017, 21:59. Просмотров 276. Ответов 7
Метки нет (Все метки)

Не могу сообразить как перегрузить операторы +,-,+=,-= и = для класса время. Нужно это как-то реализовать с учетом, что 60 секунд = минута и 60 минута = час.


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
#include <iostream> 
#include <stdlib.h> 
#include <stdio.h> 
#include <math.h> 
using namespace std;
 
class Time{
private: int h,m,s;
public:
    explicit Time(int nh=0, int nm=0, int ns=0) : h(nh), m(nm), s(ns) {;} 
    Time(const Time& t) : h(t.h), m(t.m), s(t.s) {;}
    ~Time() { cout << "RIP: " << h << ":" << m << ":" << s <<endl << flush; } 
    int hu() const { return h; }
    int mu() const { return m; }
    int su() const { return s; }
 
Time operator+(const Time&t)
{
    Time result;
    return result;
}
 
Time operator-(const Time&t)
{
    Time result;
    return result;
}
Time operator+=(const Time&t)
{
    Time result;
    return result;
}
Time operator-=(const Time&t)
{
    Time result;
    return result;
}
Time operator=(const Time&t)
{
    Time result;
    return result;
}
    
};
 
ostream& operator<<(ostream& os, const Time& t)
{ os << t.hu() << ":"<<t.mu()<<":"<<t.su(); 
 return os;
}
 
istream& operator>> (istream& is, Time& t)
{
 int nh, nm, ns;
  cout<<"Введите часы:"<<endl; 
 is>>nh;
  cout<<"Введите минуты:"<<endl; 
 is >> nm;
  cout<<"Введите секунды:"<<endl; 
 is>>ns;
 t = Time(nh,nm,ns);
 return is;
}
 
 
void main( )
{
 setlocale(LC_ALL, "Russian");
 Time t1,t2,t3;
 char op;
 
cout<<"enter t1"<<endl<<flush;
 cin>>t1; 
 cout<<"enter op"<<endl<<flush;
 cin>>op; 
 cout<<"enter t2"<<endl<<flush;
 cin>>t2; 
 
 switch (op){
 case'+': t3=t1+t2; break;
 case'-': t3=t1-t2; break; 
 default:
 cout<<"Error!"<<flush;
 return ;
 } 
 cout<<t1<<' '<<op<<' '<<t2<<" = "<<t3<<"\n"<<flush; 
 system("pause");
 
}
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.03.2017, 21:59
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Перегрузка операторов класса время (C++):

Перегрузка операторов класса
Господа, сразу перейду к делу. Написал класс, но не могу перегрузить операторы...

Перегрузка операторов для класса
class A { private: size_t i; public: size_t i_get() { return...

Перегрузка операторов класса String
Помогите сделать: Создать класс строка Stroka. Перегрузить операторы: 1) !...

Шаблон класса и перегрузка операторов
Есть класс, вроде бы все сделано правильно, все как надо работает Вот...

Перегрузка операторов класса String
Срочно нужна помощь. Реализовать класс String для работы со строками символов....

Перегрузка операторов в шаблоне класса
#include &lt;cstdlib&gt; #include &lt;iostream&gt; #include &lt;typeinfo&gt; #include...

7
nmcf
6240 / 5552 / 2527
Регистрация: 14.04.2014
Сообщений: 23,345
08.03.2017, 22:07 #2
Преобразуй всё в секунды, выполни нужное действие и раздели назад.

Добавлено через 42 секунды
Ну а с = что не ясно? Присваивай просто.
0
Kopylov
1 / 1 / 0
Регистрация: 22.09.2013
Сообщений: 21
08.03.2017, 22:44  [ТС] #3
Алгоритм то понятен, а как реализовывать - нет.
0
nmcf
6240 / 5552 / 2527
Регистрация: 14.04.2014
Сообщений: 23,345
08.03.2017, 23:47 #4
Лучший ответ Сообщение было отмечено Kopylov как решение

Решение

C++
1
2
3
4
5
6
7
8
9
10
Time& operator += (const Time &t)
{
    int d = (s + m * 60 + h * 60 * 60) - (t.s + t.m * 60 + t.h * 60 * 60);
    s = d % 60;
    d /= 60;
    m = d % 60;
    h = d / 60;
 
    return *this;
}
1
Kopylov
1 / 1 / 0
Регистрация: 22.09.2013
Сообщений: 21
09.03.2017, 00:03  [ТС] #5
По поводу плюса:
C++
1
2
3
4
5
6
Time operator+(const Time& t) const
{
    Time res(*this);
    res += t;
    return res;
}
Вот так вот норм работает, но если поставить & после time работать не будет, не подскажешь почему?
C++
1
2
3
4
5
6
Time& operator+(const Time& t) const
{
    Time res(*this);
    res += t;
    return res;
}
0
immortal21
5 / 5 / 6
Регистрация: 02.02.2014
Сообщений: 31
09.03.2017, 00:12 #6
Ты пытаешься вернуть адрес переменной, которая создана в функции(перезагрузка оператора). После выхода из функции переменная перестает существовать.
0
rikimaru2013
C++ Game Dev
2471 / 1140 / 348
Регистрация: 30.11.2013
Сообщений: 3,709
09.03.2017, 01:05 #7
Kopylov, на самом деле вам не верно советуют - у вас должен быть 1 метод стабилизации времени и тогда оператор будет следующим
C++
1
2
3
4
5
6
7
8
9
Time( int h, int m, int s)
{
  AddSeconds( h * SECOND_IN_HOUR + m * SECONDS_IN_MINUTE + s);
}
Time& operator+=( const Time& s)
{
  AddSeconds( s.h * SECOND_IN_HOUR + s.m * SECONDS_IN_MINUTE + s.s);
  return *this;
}
0
nmcf
09.03.2017, 09:59     Перегрузка операторов класса время
  #8

Не по теме:

Почему не верно? Ну обобщить он сам должен.

0
09.03.2017, 09:59
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.03.2017, 09:59
Привет! Вот еще темы с ответами:

Перегрузка операторов для класса треугольника
Дан класс Треугольник, включающий в себя закрытые поля для сторон и медиан....

Не работает перегрузка операторов шаблонного класса
помогите кто может разобрать что не работает( в понедельник екзамен, а я так...

Перегрузка операторов для класса матриц
Собственно, суть проблемы. Пишу класс матриц (хочется), оператор присваивания...

Перегрузка операторов для класса Треугольник
Задание: Перегрузить операторы &gt;, &lt;, == для класса Треугольник относительно...


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

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

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