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

Перегрузка операторов ввода и вывода - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 20, средняя оценка - 4.80
Student100
3 / 3 / 2
Регистрация: 08.04.2011
Сообщений: 27
12.04.2011, 18:51     Перегрузка операторов ввода и вывода #1
Добрый вечер! Помогите с задачкой.Я создал класс очередь и класс массив очередей.задача готова, но препод потребовал перегрузить оператор ввода и вывода((

вот задача
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
#include "stdafx.h"
#include "iostream"
#include "class.h"
#include "massiv.h"
void RedactOchered(massiv& mas,int i)
{
    char elem,head;
    int sv=0,kol=0;
     cout<<"1. Вставить элемент в хвост очереди."<<endl;
     cout<<"2. Показать очередь."<<endl;
     cout<<"3. Удалить элемент из головы очереди."<<endl;
     cout<<"4. Показать голову очереди."<<endl;
     cout<<"5. Показать кол-во элементов очереди."<<endl;
     cout<<"6. Проверка очереди на пустоту."<<endl;
     cout<<"0. Выход в предыдущее меню"<<endl;
     cout<<"Введите пункт"<<endl;
     cin>>sv;
 
    while(sv!=0)
    {
        switch(sv)
         {
           case 1:
                    cout<<"Введите новый элемент:"<<endl;
                    cin>>elem;
                    mas[i].insert_tail(elem);
                    cout<<"Введите пункт"<<endl;
                    cin>>sv;
                    break;
           case 2:
                    mas[i].print();
                    cout<<"Введите пункт"<<endl;
                    cin>>sv;
                    break;
           case 3:
                    mas[i].delete_head();
                    cout<<"Введите пункт"<<endl;
                    cin>>sv;
                    break;    
           case 4:
                    head=mas[i]._head();
                    if(head)
                     cout<<"Голова очереди - "<<head<<endl;
                    cout<<"Введите пункт"<<endl;
                    cin>>sv;
                    break;
           case 5:
                    kol=mas[i].kol();
                    cout<<"Кол-во элементов в очереди = "<<kol<<endl;;
                    cout<<"Введите пункт"<<endl;
                    cin>>sv;
                    break;
           case 6: 
                    if(!mas[i].kol())
                        cout<<"Очередь пуста"<<endl;
                    else 
                        cout<<"Очередь не пуста"<<endl;
                    cout<<"Введите пункт"<<endl;
                    cin>>sv;
                    break;
           case 0:
                    break;
         }
    }
}
 
void main()
{
 int n=0,
     index=0,
     razmer=0;
     massiv q;    
     setlocale( LC_ALL, "Russian" );
     cout<<"1. Введите индекс элемента массива."<<endl; 
     cout<<"2. Редактировать элемент массива."<<endl;
     cout<<"0. Exit"<<endl;
     cout<<"Введите пункт"<<endl;
     cin>>n;
     while(n!=0)
      {
       switch(n)
        {
         case 1:
                cout<<"Введите индекс элемента массива."<<endl;
                cin>>index;
                cout<<"Введите пункт"<<endl;
                cin>>n;
                break; 
         case 2:
                RedactOchered(q,index);
                cout<<"Введите пункт"<<endl;
                cin>>n;
                break;
         case 0:
                break;
}
}
}
вот класс очереди
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
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
using namespace std;
class ochered
{
 private:
     struct element
      {
        char info;
        element *prev;
        element *next;
      };
     element *head;//указатель на голову очереди
     element *tail;//указатель на хвост очереди
     int n;//размер очереди
 public:
     //ochered& operator <<(char a);
     ochered();//создание пустой очереди
     ~ochered();
     void insert_tail(char x);//вставка элемента в хвост очереди
     void delete_head();//удаление элемента из головы очереди
     void print();//показать очередь
     char _head();//показать голову очереди
     int  kol();//количество элементов
     bool is_empty();//проверка ну пустоту
     //void clear();очистка очереди
};
/*ochered& ochered::operator << (string a){
        element* ph = new element;
        ph->info = a;
        ph->next = 0;
        if (head!=0){
                tail->next = ph;
                tail = ph;
        }
        else{
                head = ph;
                tail = ph;
        }
        return *this;
}*/
 
//реализация
ochered::ochered()
{
     head=0;
     tail=0;
     n=0;
}
ochered::~ochered(){
while(head)
  {
   element* temp = head;
   head = head->next;
   delete temp;
   temp = 0; 
  }
}
//возвращение элемента из головы очереди
char ochered::_head()
{
     if(!head)
      {
        cout<<"Очередь пуста"<<endl;
        return 0;
      }    
     else 
        return head->info;
};
 
//возвращение количества элементов очереди
int ochered::kol()
{
     return n;
}
 
//проверка очереди на пустоту
bool ochered::is_empty()
{
     return !head;
};
 
//вставка элемента в хвост очереди
void ochered::insert_tail(char x)
{
 element *temp;
    
     temp=new element;
     temp->info=x;
     temp->next=0;
     temp->prev=tail;
     if(head==0)
            head = tail = temp;
     else
            {
              tail->next= temp;
              tail = temp;
            }
     n++;
}    
     
//удаление элемента из головы очереди
void ochered::delete_head()
{    
 element *temp;
    
     if(head)
      {
            temp=head;
            head=head->next;
            delete temp;
            n--;
      }
     else cout<<"Очередь пуста"<<endl;
};
 
//показать очередь
void ochered::print()
{
 element *temp;
     temp=head;
     if(head)
      {
            while(temp!=0)
             {
                 cout<<temp->info<<" ";
                 temp=temp->next;
             }
            cout<<endl;
      }
     else cout<<"Очередь пуста"<<endl;
}
и класс массива
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
class massiv
{
private:
        ochered *m;
        int size;
public:
        massiv();
        ~massiv();
        ochered& operator[](int n);
};
 
ochered& massiv::operator[](int n)      
{
 if(n<0 || n>=size)
   { 
    exit(1); 
   }
 return m[n];                  
}
 
massiv::massiv()
{
 setlocale( LC_ALL, "Russian" );
 cout<<"Введите размер массива"<<endl;
 cin>>size;
 m = new ochered[size];
}
 
massiv::~massiv()
{
 delete[] m;
 size=0;
}
нужно чтоб оператор вывода выводил очередь, тоесть элемент массива на экран, а оператор ввода считывал строку введённую с клавы и вносил её в очредь.

я сделал оператор ввода
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
ochered& ochered::operator << (string a){
        element* ph = new element;
        ph->info = a;
        ph->next = 0;
        if (head!=0){
                tail->next = ph;
                tail = ph;
        }
        else{
                head = ph;
                tail = ph;
        }
        return *this;
}
но он работает если вводить элементвы по одному(( помогите пожалуйста))заранее спасибо))
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
kravam
быдлокодер
 Аватар для kravam
1512 / 872 / 44
Регистрация: 04.06.2008
Сообщений: 5,271
12.04.2011, 21:45     Перегрузка операторов ввода и вывода #2
Ты бы поработал ещё над интерфейсом, а то начинается: "введите элемент массива"... Какого массива, зачем вводить? Для редактирования, для заполнения... Непонятно в общем.
Student100
3 / 3 / 2
Регистрация: 08.04.2011
Сообщений: 27
13.04.2011, 05:54  [ТС]     Перегрузка операторов ввода и вывода #3
да доработаю потом..мне операторы главное сделать.может поможешь?
kravam
быдлокодер
 Аватар для kravam
1512 / 872 / 44
Регистрация: 04.06.2008
Сообщений: 5,271
13.04.2011, 12:29     Перегрузка операторов ввода и вывода #4
Нужно быть последовательным. Щас надо дорабатывать. Или минимизируй, убери ненужный код и оставь нужный, а то пока до сути доберёшься, возникнет куча вопросов, ненужных совсем

...ЕСли у тебя не работает оператор ввода строки, то и надо чтобы я это увидел. ТО есть:
"Введите строку, она должна занестись в очередь"

А то я вижу
"вводить размер массива"
Student100
3 / 3 / 2
Регистрация: 08.04.2011
Сообщений: 27
13.04.2011, 13:36  [ТС]     Перегрузка операторов ввода и вывода #5
Вот само задание: Реализовать класс "Очередь символов"(на базе списка).Реализовать класс "Массив очередей".Длинна массива определяется во время инициализации и в дальнейшем не меняется.Массив должен хранить сами очереди, а не указатели на них.Доступ к элементам массива осуществляется с помощью квадратных скобок.

файл massiv.h
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
class massiv
{
private: 
        ochered *m;
        int isize;
public:
        massiv(int size);
        ~massiv();
        ochered& operator[](int n);
};
 
massiv::massiv(int size)
{
 m = new ochered[size];
 isize=size;
}
 
massiv::~massiv()
{
 delete[] m;
 isize=0;
}
 
ochered& massiv::operator[](int n)      
{
 if(n<0 || n>=isize)
   { 
    exit(1); 
   }
 return m[n];                  
}
файл class.h
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
using namespace std;
class ochered
{
 private:
     struct element
      {
        char info;
        element *prev;
        element *next;
      };
     element *head;//указатель на голову очереди
     element *tail;//указатель на хвост очереди
 public:
     ochered();
     ~ochered();
            void insert_tail(char x);//вставка элемента в хвост очереди
     void delete_head();//удаление элемента из головы очереди
            void print();//показать очередь
     bool is_empty();//проверка ну пустоту
};
 
//реализация
ochered::ochered()
{
     head=0;
     tail=0;
     n=0;
}
 
ochered::~ochered()
{
while(head)
  {
   element* temp = head;
   head = head->next;
   delete temp;
   temp = 0; 
  }
}
 
//проверка очереди на пустоту
bool ochered::is_empty()
{
     return !head;
};
 
//вставка элемента в хвост очереди
void ochered::insert_tail(char x)
{
  element *temp;
     temp=new element;
     temp->info=x;
     temp->next=0;
     temp->prev=tail;
     if(head==0)
     head = tail = temp;
     else
     {
       tail->next= temp;
              tail = temp;
     }
}    
     
//удаление элемента из головы очереди
void ochered::delete_head()
{    
 element *temp;
    
     if(head)
      {
            temp=head;
            head=head->next;
            delete temp;
      }
     else cout<<"Очередь пуста"<<endl;
};
 
//показать очередь
void ochered::print()
{
 element *temp;
     temp=head;
     if(head)
      {
            while(temp!=0)
             {
          cout<<temp->info<<" ";
                 temp=temp->next;
             }
            cout<<endl;
      }
     else cout<<"Очередь пуста"<<endl;
}
ну и основной файл
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
#include "stdafx.h"
#include "iostream"
#include "class.h"
#include "massiv.h"
void RedactOchered(massiv& mas,int i)
{
    char elem;
    int sv=0,
        kol=0;
     cout<<"*****************************************************"<<endl;
     cout<<"1. Вставить элемент в хвост очереди."<<endl;
            cout<<"2. Показать очередь."<<endl;
            cout<<"3. Удалить элемент из головы очереди."<<endl;
            cout<<"4. Проверка очереди на пустоту."<<endl;
     cout<<"0. Вернуться в предыдущее меню"<<endl;
     cout<<"*****************************************************"<<endl;
            cout<<"Введите пункт"<<endl;
     cin>>sv;
 
    while(sv!=0)
    {
        switch(sv)
         {
           case 1:
                                   cout<<"Введите новый элемент:"<<endl;
                            cin>>elem;
              mas[i].insert_tail(elem);
              cout<<"Введите пункт меню:"<<endl;
                            cin>>sv;
                            break;
                          case 2:
             mas[i].print();
             cout<<"Введите пункт меню:"<<endl;
                           cin>>sv;
                            break;
                          case 3:
                                   mas[i].delete_head();
              cout<<"Введите пункт меню:"<<endl;
                            cin>>sv;
                            break;    
          case 4: 
                                  if(mas[i].is_empty())
                                       cout<<"Очередь пуста"<<endl;
                           else 
                                cout<<"Очередь не пуста"<<endl;
                    cout<<"Введите пункт меню:"<<endl;
                    cin>>sv;
                           break;
          case 0:
                    break;
          default: 
             cout<<"Такого пункта нет!!"<<endl;
             cout<<"Введите пункт меню:"<<endl;
            cin>>sv;
         }
    }
}
 
void main()
{
 int n=0,
     index=0;
 massiv q(3); //инициализация массива размером 3
     setlocale( LC_ALL, "Russian" );
     cout<<"*****************************************************"<<endl;
     cout<<"1. Введите номер очереди которую вы хотите изменить"<<endl; 
     cout<<"2. Редактировать элемент массива."<<endl;
     cout<<"0. Exit"<<endl;
     cout<<"*****************************************************"<<endl;
     cout<<"Введите пункт"<<endl;
     cin>>n;
     while(n!=0)
      {
       switch(n)
        {
         case 1:
             cout<<"Введите номер:"<<endl;
                cin>>index;
                cout<<"Введите пункт меню:"<<endl;
                cin>>n;
                break; 
         case 2:
                RedactOchered(q,index);
                cout<<"*****************************************************"<<endl;
                cout<<"1. Введите номер очереди которую вы хотите изменить."<<endl; 
                cout<<"2. Редактировать элемент массива."<<endl;
                cout<<"0. Exit"<<endl;
                cout<<"*****************************************************"<<endl;
                cout<<"Введите пункт меню:"<<endl;
                cin>>n;
                break;
         case 0:
                break;
         default: 
                    cout<<"Такого пункта нет!!"<<endl;
                    cout<<"Введите пункт меню:"<<endl;
                    cin>>n;
}
}
}

всё что мог я убрал.

Добавлено через 12 минут
с классами работаю впервые.с ними хоть как то разоборался а с перегрузкой(((помоги решить проблему
kravam
быдлокодер
 Аватар для kravam
1512 / 872 / 44
Регистрация: 04.06.2008
Сообщений: 5,271
13.04.2011, 13:58     Перегрузка операторов ввода и вывода #6
Несерьёзно
Эта херь ошибочна
C++
1
2
3
4
5
6
ochered::ochered()
{
         head=0;
     tail=0;
     n=0;
}
n не член класса. Ни приватный, ни публичный ни защищённый, его вообще нет, а ты его используешь в конструкторе. У тебя же не компилится проект!
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.04.2011, 17:03     Перегрузка операторов ввода и вывода
Еще ссылки по теме:

C++ Перегрузка операторов вывода в файл и считывание из файла
Перегрузка операторов ввода и вывода C++
C++ Перегрузка операторов присваивания, ввода, вывода

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

Или воспользуйтесь поиском по форуму:
Student100
3 / 3 / 2
Регистрация: 08.04.2011
Сообщений: 27
13.04.2011, 17:03  [ТС]     Перегрузка операторов ввода и вывода #7
аа блин да прогу переделывал и убрал n везде а в конструкторе забыл.и прогу не проверял

Добавлено через 2 часа 50 минут
всё спасибо не надо.сам сделал)))
Yandex
Объявления
13.04.2011, 17:03     Перегрузка операторов ввода и вывода
Ответ Создать тему
Опции темы

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