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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 8, средняя оценка - 4.75
voice8787
19 / 19 / 3
Регистрация: 21.08.2010
Сообщений: 136
#1

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

12.03.2011, 10:18. Просмотров 1049. Ответов 4
Метки нет (Все метки)

Вот упрощенный вариант моей программы, пересчитывает время в 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++
Осуществляю перегрузку оператора +. и вот почему-то член класса s меняет свою длину с 4 до 7 и мне вот это не понятно.. Подскажите,...

Перегрузка оператора = - C++
Ввести строку символов S1. Программа должна содержать перегруженную операцию “=”, использование которой скопирует S1 в S2 при следующих...

Перегрузка оператора [] - C++
Создал класс в котором массив указателей на другой класс, перегрузил оператор взятия индекса следующим образом: h-файл #ifndef...

Перегрузка оператора - - C++
В своём классе я перегрузил оператор -,но в функции,использующей вычитание возникает ошибка error C2678: бинарный &quot;-&quot;: не найден...

Перегрузка оператора += - C++
реализую класс собственных строк называеться MyString вылетает при использовании оператора += самое интересное что если дебажишь код по...

Перегрузка оператора () - C++
кто может подсказать как создать перегрузку что бы можно было работать с амссивввом в таком ввиде mass(3)=2 а не mass=2; если можно...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Dexter
285 / 145 / 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
Эксперт С++
4963 / 3039 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
12.03.2011, 13:33 #3
Цитата Сообщение от DexterUa Посмотреть сообщение
<< это оператор вывода
Не-а. Нет в плюсах оператора вывода. А оператор << - оператор побитового сдвига влево (хотя формально, для простоты, можно его обозвать оператором вывода, но фактически это сдвиг).
voice8787
19 / 19 / 3
Регистрация: 21.08.2010
Сообщений: 136
12.03.2011, 14:05  [ТС] #4
спасибо большое за помощь, но не работает все равно, выкидывает...
выложил полный код программы в архив на всякий случай
Вложения
Тип файла: rar TimeC++.rar (1.9 Кб, 13 просмотров)
voice8787
19 / 19 / 3
Регистрация: 21.08.2010
Сообщений: 136
12.03.2011, 15:16  [ТС] #5
еще раз спасибо за помощь, уже сам разобрался)
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.03.2011, 15:16
Привет! Вот еще темы с ответами:

Перегрузка оператора + - C++
Не могу заставить работать перегруженный оператор + в функции CMoveByVector Point.h: #define POINT_H #include &lt;iostream&gt; ...

Перегрузка оператора << - C++
Есть такой код. class matrix { public: ......; const double* operator(int) const; double* const operator(int); friend...

Перегрузка оператора << - C++
Здравствуйте форумчане, помогите исправить ошибку. Вообщем есть класс с перегруженным оператором &lt;&lt; . Category.h class...

Перегрузка оператора = - C++
Нужно перегрузить оператор так что бы в начале строки и в конце были квадратные скобки . Все почти работает только вот вывод на экран не...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
12.03.2011, 15:16
Ответ Создать тему
Опции темы

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