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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 20, средняя оценка - 4.80
Student100
3 / 3 / 2
Регистрация: 08.04.2011
Сообщений: 27
#1

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

12.04.2011, 18:51. Просмотров 2815. Ответов 6
Метки нет (Все метки)

Добрый вечер! Помогите с задачкой.Я создал класс очередь и класс массив очередей.задача готова, но препод потребовал перегрузить оператор ввода и вывода((

вот задача
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;
}
но он работает если вводить элементвы по одному(( помогите пожалуйста))заранее спасибо))
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.04.2011, 18:51
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Перегрузка операторов ввода и вывода (C++):

Перегрузка операторов ввода\вывода - C++
Вот такой простенький пример описан во многих постах, есть в некоторых видео но у меня в компиляторе mvs 2015, при компиляции выдает...

Перегрузка операторов ввода и вывода - C++
#include &lt;iostream&gt; #include &lt;conio.h&gt; using namespace std; class ComplexNumber { private: double a, b; ...

Перегрузка операторов ввода вывода - C++
ребята болит уже голова)) main.cpp #include &quot;myStr.h&quot; int main() { myStr myS(&quot;ok&quot;); cout&lt;&lt;myS&lt;&lt;endl;//надо чтоб...

Перегрузка операторов ввода-вывода - C++
Доброго времени суток! Почему перестал работать &gt;&gt; оператор для стандартного типа char. Перегруженная операция cin&gt;&gt;one возвращает все...

Перегрузка операторов ввода/вывода - C++
Вроде сделал, но не работает перегрузка оператора ввода. #include &quot;stdafx.h&quot; #include &lt;iostream&gt; using namespace std; ...

Перегрузка операторов ввода вывода - C++
в .h файле сделал объявление inline ostream&amp; operator &lt;&lt;(ostream&amp;, const Proc&amp;); inline istream&amp; operator &gt;&gt;(istream&amp;, Proc&amp;); в...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
kravam
быдлокодер
1695 / 882 / 45
Регистрация: 04.06.2008
Сообщений: 5,459
12.04.2011, 21:45 #2
Ты бы поработал ещё над интерфейсом, а то начинается: "введите элемент массива"... Какого массива, зачем вводить? Для редактирования, для заполнения... Непонятно в общем.
0
Student100
3 / 3 / 2
Регистрация: 08.04.2011
Сообщений: 27
13.04.2011, 05:54  [ТС] #3
да доработаю потом..мне операторы главное сделать.может поможешь?
0
kravam
быдлокодер
1695 / 882 / 45
Регистрация: 04.06.2008
Сообщений: 5,459
13.04.2011, 12:29 #4
Нужно быть последовательным. Щас надо дорабатывать. Или минимизируй, убери ненужный код и оставь нужный, а то пока до сути доберёшься, возникнет куча вопросов, ненужных совсем

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

А то я вижу
"вводить размер массива"
0
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 минут
с классами работаю впервые.с ними хоть как то разоборался а с перегрузкой(((помоги решить проблему
0
kravam
быдлокодер
1695 / 882 / 45
Регистрация: 04.06.2008
Сообщений: 5,459
13.04.2011, 13:58 #6
Несерьёзно
Эта херь ошибочна
C++
1
2
3
4
5
6
ochered::ochered()
{
         head=0;
     tail=0;
     n=0;
}
n не член класса. Ни приватный, ни публичный ни защищённый, его вообще нет, а ты его используешь в конструкторе. У тебя же не компилится проект!
0
Student100
3 / 3 / 2
Регистрация: 08.04.2011
Сообщений: 27
13.04.2011, 17:03  [ТС] #7
аа блин да прогу переделывал и убрал n везде а в конструкторе забыл.и прогу не проверял

Добавлено через 2 часа 50 минут
всё спасибо не надо.сам сделал)))
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.04.2011, 17:03
Привет! Вот еще темы с ответами:

Перегрузка операторов ввода/вывода. - C++
Класс комплексных чисел. Нужно чтобы программа выводила и вводила в таком виде (функции in и out): #include &lt;iostream&gt; #include...

Перегрузка операторов потокового ввода-вывода - C++
Пожалуйста, ответе на такой вопрос: почему при написании класса, при перегрузке операторов ввода-вывода, их обязательно нужно объявлять в...

Перегрузка операторов потокового ввода вывода - C++
Есть класс &quot;деканат&quot;, полем которого есть список студентов, объектов из класса &quot;Студент&quot;. Как переопределяя операторы &quot;&gt;&gt;&quot; &quot;&quot;&lt;&lt;&quot; вывести...

Перегрузка операторов присваивания, ввода, вывода - C++
Приветствую, помогите реализовать перегрузку операторов(в частности операторы присваивания, ввода, вывода) для данной программы. Я не могу...


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

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

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