Форум программистов, компьютерный форум CyberForum.ru

Перегрузка оператора << - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 8, средняя оценка - 4.75
voice8787
 Аватар для voice8787
19 / 19 / 3
Регистрация: 21.08.2010
Сообщений: 136
12.03.2011, 10:18     Перегрузка оператора << #1
Вот упрощенный вариант моей программы, пересчитывает время в 12-й формат
мне нужно перегрузить оператор << так, чтобы time_cycle_1<<(1); было аналогично time_cycle_1.GetTime(buf1);
не подскажете как это сделать, замучался уже...
с моим вариантом перегрузки оператора выкидывает из программы

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
class CTimeCycle
{
  int m_hours;
  int m_minutes;
 
public:
  CTimeCycle();
 ~CTimeCycle();
 
  int  GetHour ();
  int  GetMinute();
 void GetTime (char *buf);
 
  
CTimeCycle CTimeCycle::operator<<(int x);
};
 
void CTimeCycle::GetTime (char *buf)
{ 
int new_hours;
new_hours=m_hours;
if(m_hours>=13&&m_hours<24)
    m_hours=m_hours-12;
    
  if (new_hours>=12)
     sprintf(buf,"%02d:%02d:%02dpm",m_hours,m_minutes);
  if (new_hours>0&&new_hours<12) 
     sprintf(buf,"%02d:%02d:%02dam",m_hours,m_minutes);
  if (new_hours==0) 
     sprintf(buf,"12:%02d:%02dam",m_hours,m_minutes);
  
return;
}
 
CTimeCycle CTimeCycle::operator<<(int x)
{
char *buf3;
if (x==1)
{
sprintf(buf,"%02d:%02d:%02dpm",m_hours,m_minutes);
GetTime(buf3);
return *this;
}
}
 
 
 
main()
{
  CTimeCycle time_cycle_1;
  char buf[32];
 
  while(1)
  {
    printf("Please, type a time ('q' to exit) [hh:mm:ss]: ");
    scanf("%s",buf);
    if(!strcmp(buf1,"q")) break;
    time_cycle_1.SetTime(buf1);
    if (!time_cycle_1.SetTime(buf1))
    {
      printf("The time You have typed is invalid.\n");
      continue;
    }
 
    time_cycle_1<<(1);  
  }
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.03.2011, 10:18     Перегрузка оператора <<
Посмотрите здесь:

C++ Перегрузка оператора %
Перегрузка оператора == C++
Перегрузка оператора C++
перегрузка оператора! C++
Перегрузка оператора C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Dexter
 Аватар для Dexter
284 / 144 / 16
Регистрация: 13.10.2009
Сообщений: 164
12.03.2011, 11:25     Перегрузка оператора << #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
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
#include <iostream>
using namespace std;
class CTimeCycle
{
    int m_hours;
    int m_minutes;
 
public:
    CTimeCycle(){m_hours=0;m_minutes=0;}
    CTimeCycle(int x,int y){m_hours=x;m_minutes=y;}
    ~CTimeCycle(){}
 
    int  GetHour ();
    int  GetMinute();
    void GetTime (char *buf);
 
    friend ostream& operator << (ostream& s, CTimeCycle& f);
    friend istream& operator >> (istream& s, CTimeCycle& f);
};
 
void CTimeCycle::GetTime (char *buf)
{ 
    /*int new_hours;
    new_hours=m_hours;
    if(m_hours>=13&&m_hours<24)
        m_hours=m_hours-12;
 
    if (new_hours>=12)
        sprintf(buf,"%02d:%02d:%02dpm",m_hours,m_minutes);
    if (new_hours>0&&new_hours<12) 
        sprintf(buf,"%02d:%02d:%02dam",m_hours,m_minutes);
    if (new_hours==0) 
        sprintf(buf,"12:%02d:%02dam",m_hours,m_minutes);
 
    return;*/
}
 
ostream& operator << (ostream& s, CTimeCycle& f)
{
    s << f.m_hours << ":" << f.m_minutes;
    return s;
}
 
istream& operator >> (istream& s, CTimeCycle& f)
{
    s >> f.m_hours >> f.m_minutes;
    return s;
}
 
 
int main()
{
    CTimeCycle time_cycle_1(10,23);
    char buf[32];
 
    /*while(1)
    {
        printf("Please, type a time ('q' to exit) [hh:mm:ss]: ");
        scanf("%s",buf);
        if(!strcmp(buf1,"q")) break;
        time_cycle_1.SetTime(buf1);
        if (!time_cycle_1.SetTime(buf1))
        {
            printf("The time You have typed is invalid.\n");
            continue;
        }
 
        time_cycle_1<<(1);  
    }*/
    cin>>time_cycle_1;
    cout<<time_cycle_1;
    system("pause");
    return 0;
}
Закоментировал что не надо мне было, показал пример ввода-вывода, думаю разберетесь и сможете под себя подправить, если не выйдет - пишите.

Добавлено через 20 минут
Кажется я немного недопонял)

Если нужно аналогичное time_cycle_1.GetTime(buf1);

C++
1
2
3
4
5
6
7
8
9
10
11
void operator>>(int t);
void operator>>(char* buf);
 
void CTimeCycle::operator >> (int t)
{
    m_hours=t;//ну или что там для инта
}
void CTimeCycle::operator >> (char* buf)
{
    //а здесь ставите тоже самое что и в GetTime(char* buf);
}
И тогда
C++
1
2
time_cycle_1>>1;//делает часы 1
time_cycle_1>>"1";//будет делать тоже что и GetTime
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
12.03.2011, 13:33     Перегрузка оператора << #3
Цитата Сообщение от DexterUa Посмотреть сообщение
<< это оператор вывода
Не-а. Нет в плюсах оператора вывода. А оператор << - оператор побитового сдвига влево (хотя формально, для простоты, можно его обозвать оператором вывода, но фактически это сдвиг).
voice8787
 Аватар для voice8787
19 / 19 / 3
Регистрация: 21.08.2010
Сообщений: 136
12.03.2011, 14:05  [ТС]     Перегрузка оператора << #4
спасибо большое за помощь, но не работает все равно, выкидывает...
выложил полный код программы в архив на всякий случай
Вложения
Тип файла: rar TimeC++.rar (1.9 Кб, 13 просмотров)
voice8787
 Аватар для voice8787
19 / 19 / 3
Регистрация: 21.08.2010
Сообщений: 136
12.03.2011, 15:16  [ТС]     Перегрузка оператора << #5
еще раз спасибо за помощь, уже сам разобрался)
Yandex
Объявления
12.03.2011, 15:16     Перегрузка оператора <<
Ответ Создать тему
Опции темы

Текущее время: 19:32. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru