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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.90
correcеt
-1 / 3 / 1
Регистрация: 20.04.2011
Сообщений: 412
#1

Шаблон класса,ошибка TEMPLATE - C++

03.01.2013, 20:55. Просмотров 1342. Ответов 24
Метки нет (Все метки)

Вечер добрый,с таким вопросом.
Задание:
шаблон класса "однонарпавленный линейный список". И использовать его при составлении программы, которая содержит текущую информацию о заявках на авиабилеты:
- пункт назначения,
- номер рейса,
- фамилию и инициалы пассажира,
- желаемую дату вылета.
Программа должна обеспечивать:
- хранение всех заявок в виде списка,
- добавление заявок,
- удаление заявок,
- вывод заявок по заданному номеру рейса и дате вылета,
- вывод всех заявок.
-----------------------------------------------
Скажите, в каталоге с программой надо создавать какие-то фалы или как?
Т.к вот что пишет компилятор:
Шаблон класса,ошибка TEMPLATE
И еще, глядя код,мне показалось,что нет все функции тут есть,так ли это?

---------------------------------------------------------
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
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
//---------------------------------------------------------------------------
 #include <iostream.h>
#include <vcl.h>
#pragma hdrstop
 
//---------------------------------------------------------------------------
 
#pragma argsused
int main(int argc, char* argv[])
{      // =================== Файл TEMPLATE.AVB ======================
#define FILENAME "BZavia.txt"
#define TEMPFILE "Temp"
#define MAX 20
//Шаблон - класс авиабилеты
template <class T>              // Шаблон класса aviabilets
class aviabilets {
private:
FILE *fp, *tp, *printer;
 int slots[MAX];
 int count;
 
public:
  nofind();      // Функция - неудачный поиск
  openrw();      // Открыть файл  для чтения
  openwr();      // Открыть файл для записи
  getslots();    // Функция определяющая - какие ячейки заняты
  getslot();     // Функция ввода новой ячейки
  adbilet();     // Добавление билета
  delbilet();    // Удаление данных билета из списка
  showbilet();   // Вывод билета на экран
  chbilet();     // Изменение данных билета
  chcell();      // Изменение номера ячейки
  sortcells();   // Порядок возрастания номеров ячеек
  loc_punkt();   // Поиск билета по пункту назначения
  loc_fio();     // Поиск по ФИО
  loc_datvl();   // Поиск по Дате вылета
  pbilets();     // Печать билетов
 
 };
 struct BZ                  // структура с полями записей
 {
  // private:
  char punktn[20];         // Пункт назначения
  char nreis[10];          // Номер рейса
  char fio[50];            // Фамилия и инициалы пассажира
  char datvl[10];          // Дата вылета
  int number;              // Номер ячейки в базе куда заносится данные
      } disc;              // запись.диск
 
// **********************************************
   template<class T>
   aviabilets<T>::nofind() // Функция - неудачный поиск
        {
         char pause;
         puts("\nПункт назначения с таким именем не найден");
         getche();
        // pause=getchar();
         return 0;
        }
// **********************************************
     template<class T>
     aviabilets<T>::openrw() // Открыть файл  для чтения
       {
        if((fp = fopen(FILENAME,"r")) == NULL)
         {
          printf("Невозможно открыть файл %s\n", FILENAME);
          exit(0);
         }
       if((tp = fopen(TEMPFILE,"w")) == NULL)
        {
          printf("Невозможно открыть файл %s\n", TEMPFILE);
          fclose(fp);
          exit(0);
        }
        return 0;
        }
 
 
// **********************************************
                                 template<class T>
// Здесь ВЫ дописываете все функции c aviabilets<T>::ФУНКЦИЯ
 
// **********************************************
// ===========================================================
 
Переносим этот файл(TEMPLATE.AVB) в директорию где находятся файлы шаблонов
других классов и библиотек *.h
Ты их знаешь:
#include "stdio.h"
# include <conio.h>
# include <stdlib.h>
# include <string.h>
# include <iostream.h>
и другие
 
 
Создаем другой файл - ABILET.CPP
В него переносим 
 
// ========================= ABILET.CPP ======================
/*Заявки на авибилеты*/
#include  <template.avb> // Указываем файл шаблон класса aviabilets
#include  <stdio.h>
# include <conio.h>
# include <stdlib.h>
# include <string.h>
# include <iostream.h>
 
// ++++++++++++++++++++ Основной модуль ++++++++++++++++++++++
 main()
      {
       aviabilets<char> a; // Переводим в класс a
       char select;
       a.getslots();
    do
      {
      clrscr();
       puts("Информация о авиабилетах в базе аэропорта\n");
       puts("1 Добавить новый авибилет в базу\n");
       puts("2 Удалить авиабилет из базы\n");
       puts("3 Редактировать содержимое авиабилета\n");
       puts("4 Изменить номер ячейки\n");
       puts("5 Сортировка авиабилетов билетов\n");
       puts("6 Найти авиабилет\n");
       puts("7 Вывести на печать\n");
       puts("8 Выйти из программы\n");
       printf("Пожалуйста, введите Ваш выбор: ");
     select = getchar();
     putchar('\n');
     switch(select)
    {
      case '1':
      a.adbilet();
        break;
      case '2':
      a.delbilet();
        break;
      case '3':
      a.chbilet();
        break;
      case '4':
      a.chcell();
        break;
      case '5':
      a.sortcells();
        break;
      case '6':
      a.loc_punkt();
        break;
      case '7':
      a.pbilets();
        break;
      case '8':
        break;
      default:
      puts("Ошибка, повторите ввод\n\n");
    }
       }
     while(select!='8');
     return 0;
     }
 
}
//---------------------------------------------------------------------------
----------------------------
Заранее,Спасибо!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.01.2013, 20:55
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Шаблон класса,ошибка TEMPLATE (C++):

Шаблоны функций, Ошибка: для использования класса шаблон требуется список аргументов шаблон - C++
Есть у меня 3 структуры Трамвай , Троллейбус , Автобус. Для автобуса определены функции (работают) Троллейбус и Трамвай одинаковые поля...

Компиляция класса вектор. Ошибка: missing template arguments before «v» - C++
Собственно код: #include &lt;iostream&gt; #include &lt;fstream&gt; #include &lt;vector&gt; #include &lt;string&gt; using namespace std; int...

Ошибка компиляции: template-id does not match any template declaration - C++
Здравствуйте. Помогите, пожалуйста: #include &lt;iostream&gt; using namespace std; template &lt;typename T&gt; T maxn(T*, const int*); ...

Шаблон класса строк - ошибка компиляции - C++
Добрый вечер. Пытаюсь выполнить упражнение с учебника. Gcc выдаёт следующее: /home/ilyuha21st/Projects/qtcreator/cpp_some1/main.cpp:148:...

Шаблон класса. Ошибка `undefined reference` - C++
Доброго вечера. В следующем коде описывается незамысловатый шаблон. При разгрузке кода (т.е в 3 файла : main.cpp , chab.cpp , chab.h) ,...

Visual c++ шаблон template <typename TT> - C++
пытаюсь разобраться с шаблонами, но выдает ошибку я даже не знаю куда смотреть https://github.com/Paladin3by/OOP template &lt;typename...

24
Buildog
40 / 40 / 2
Регистрация: 29.04.2012
Сообщений: 185
03.01.2013, 21:31 #2
Я всегда создаю шаблоны в отдельном .h файле, в нем описывается и класс и все функции определяются, а потом подключаю его к main.cpp и использую
0
correcеt
-1 / 3 / 1
Регистрация: 20.04.2011
Сообщений: 412
03.01.2013, 21:35  [ТС] #3
Цитата Сообщение от Buildog Посмотреть сообщение
Я всегда создаю шаблоны в отдельном .h файле, в нем описывается и класс и все функции определяются, а потом подключаю его к main.cpp и использую
я с шаблонами на ВЫ, а можете пример показать или на этом сделать?
0
Buildog
40 / 40 / 2
Регистрация: 29.04.2012
Сообщений: 185
03.01.2013, 21:36 #4
И зачем определять класс внутри int main(int argc, char* argv[]) ? Если только из расширения .AVB (с коим я раньше не встречался). И конечно не все функции описаны, это даже указано в строчке

C++
1
// Здесь ВЫ дописываете все функции c aviabilets<T>::ФУНКЦИЯ
0
Avazart
Эксперт С++
7213 / 5385 / 286
Регистрация: 10.12.2010
Сообщений: 23,790
Записей в блоге: 17
03.01.2013, 21:36 #5
Код- бред, вы пытаетесь определить класс внутри main(), думаю еще не поздно взяться за книгу
0
Buildog
40 / 40 / 2
Регистрация: 29.04.2012
Сообщений: 185
03.01.2013, 21:38 #6
Вот так допустим будет выглядеть файл .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
#pragma once
#include <iostream> //И остальные заголовочные, что нужны
 
template <class T>              // Шаблон класса aviabilets
class aviabilets {
private:
FILE *fp, *tp, *printer;
 int slots[MAX];
 int count;
 
public:
  nofind();      // Функция - неудачный поиск
  openrw();      // Открыть файл  для чтения
  openwr();      // Открыть файл для записи
  getslots();    // Функция определяющая - какие ячейки заняты
  getslot();     // Функция ввода новой ячейки
  adbilet();     // Добавление билета
  delbilet();    // Удаление данных билета из списка
  showbilet();   // Вывод билета на экран
  chbilet();     // Изменение данных билета
  chcell();      // Изменение номера ячейки
  sortcells();   // Порядок возрастания номеров ячеек
  loc_punkt();   // Поиск билета по пункту назначения
  loc_fio();     // Поиск по ФИО
  loc_datvl();   // Поиск по Дате вылета
  pbilets();     // Печать билетов
 
 };
 struct BZ                  // структура с полями записей
 {
  // private:
  char punktn[20];         // Пункт назначения
  char nreis[10];          // Номер рейса
  char fio[50];            // Фамилия и инициалы пассажира
  char datvl[10];          // Дата вылета
  int number;              // Номер ячейки в базе куда заносится данные
      } disc;              // запись.диск
 
// **********************************************
   template<class T>
   aviabilets<T>::nofind() // Функция - неудачный поиск
        {
         char pause;
         puts("\nПункт назначения с таким именем не найден");
         getche();
        // pause=getchar();
         return 0;
        }
// **********************************************
     template<class T>
     aviabilets<T>::openrw() // Открыть файл  для чтения
       {
        if((fp = fopen(FILENAME,"r")) == NULL)
         {
          printf("Невозможно открыть файл %s\n", FILENAME);
          exit(0);
         }
       if((tp = fopen(TEMPFILE,"w")) == NULL)
        {
          printf("Невозможно открыть файл %s\n", TEMPFILE);
          fclose(fp);
          exit(0);
        }
        return 0;
        }
0
correcеt
-1 / 3 / 1
Регистрация: 20.04.2011
Сообщений: 412
03.01.2013, 21:41  [ТС] #7
скажите,а каких функции нет?
0
Buildog
40 / 40 / 2
Регистрация: 29.04.2012
Сообщений: 185
03.01.2013, 21:43 #8
Ну неужели не видно? Вот
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
openwr();      // Открыть файл для записи
  getslots();    // Функция определяющая - какие ячейки заняты
  getslot();     // Функция ввода новой ячейки
  adbilet();     // Добавление билета
  delbilet();    // Удаление данных билета из списка
  showbilet();   // Вывод билета на экран
  chbilet();     // Изменение данных билета
  chcell();      // Изменение номера ячейки
  sortcells();   // Порядок возрастания номеров ячеек
  loc_punkt();   // Поиск билета по пункту назначения
  loc_fio();     // Поиск по ФИО
  loc_datvl();   // Поиск по Дате вылета
  pbilets();     // Печать билетов
там есть только 2 функции первых

C++
1
2
  nofind();      // Функция - неудачный поиск
  openrw();      // Открыть файл  для чтения
0
correcеt
-1 / 3 / 1
Регистрация: 20.04.2011
Сообщений: 412
03.01.2013, 21:47  [ТС] #9
а если вот этот код переделать через шаблон...или он тоже бред?
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
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
#   include <string.h>
#   include <iostream.h>
#   include <windows.h>
class Avia
{
public:
char punkt[15], fio[50]; int namber, data[3]; Avia *Next; Avia();
Avia(char* al, char* bl, int, int*);
};
class List {
public:
Avia* First;
ListO;
void Add(Avia *pNext); //добавление в конец списка Avia* Poisk();
void ShowAll(); //показ всего списка
Avia* FindAvia(int nomer, int *datal); //поиск в списке Avia* GetPrev(Avia *p); int GetCount();
Avia * GetAt(int n); // получает элемент по его номеру bool RemoveAvia(int nomer, int *datal); //удаление элемента
};
Avia::Avia()
{
memset(punkt,0,sizeof(punkt)); 
memset(fio,0,sizeof(fio));
Next=NULL; //обнуляем указатель последнего элемента
Avia::Avia(char* al, char* bl, int namberl, int *datal)
{
strcpy(punkt, al); strcpy(fio, b 1); namber=namberl;
for (int i=0; i<3; i++) data[i]=datal[i];
Next=NULL; //обнуляем указатель последнего элемента
}
List::List()
{
First=NULL; //обнуляем указатель первого элемента
}
void List::Add(Avia *pNext)
{
// Если список не пуст. if(First!=NULL)
Poisk()->Next = pNext;
else
// Если список пуст, First = pNext;
}
Avia* List: :Poisk()
{
Avia *X = First;
// Если список пуст if(X == NULL) return NULL;
// Пока есть следующий элемент списка. whi!e(X->Next!=NULL) X = X->Next;
return X;
}
void List::ShowAll()
{
// Указатель на очередные данные в списке. Avia * pCurr = First; // Если список пуст
if(pCurr == NULL)
{
соиК<"Список пустЛп";
}
// Пока есть следующий элемент списка, do
// Выводим на консоль очередной элемент. cout«pCurr->fio«"\t"«pCurr->punkt«"\t"«pCurr->namber«"\t"«pCurr- >data[0]«"."«pCurr->data[l]«"."«pCurr->data[2]«"\n"; 
while((pCurr = pCurr->Next)!=NULL);
Avia* List::FindAvia(int nomer, int *datal)
{
int flag=0;
// Указатель на очередные данные в списке. Avia * pCurr = First;
// Если список пуст, то возвращаем NULL.
if(pCurr == NULL) {
соЩ«"Списка нет";
}
// Обходим все элементы списка. do{
// Если нашли искомый элемент, то его и возвращаем.
if(pCurr->namber==nomer && pCurr->data[0]==datal [0] && pCurr->data[l]==datal[l] &&
pCurr->data[2]==data 1 [2]) {
// Выводим на консоль
coiit<<pCurr->fio<<''\t',<<pCurr->punkt<<''\t''<<pCurr->namber<<''\t''<<pCurr- >data[0]«". "<<pCurr->data[ 1 ]«". "<<pCurr->data[2] <<"\n"; flag=l; return pCurr;
}
}while((pCurr = pCurr->Next)!=NULL);
if (flag==0) соЩ«"Такой заявки HeT"«endl; return pCurr;
}
Avia* List::GetPrev(Avia *p)
{
// Если предыдущего элемента списка нет (т. е. наш элемент совпадает с первым), то возвращем
NULL.
if(p == First)
return NULL; // Если предыдущий элемент есть. Avia * pCurr = First; do{
if(pCurr->Next==p) { // возвращаем очередной элемент, return pCurr;
}
// Переводим pCurr на следующий элемент в списке. }while((pCurr = pCurr->Next)!=NULL); return NULL;
}
int List::GetCount()
{
// Указатель на очередные данные в списке. Avia * pCurr = First; // Если список пуст
if(pCurr == NULL)
{
return 0;
int count = 1; //Число элементов в списке. // Пока есть следующий элемент списка.
while(pCurr->Next!=NULL)
{
// Переходим на следуюющего. pCurr = pCurr->Next; // Увеличиваем счетчик. count++;
}
return count;
Avia * List::GetAt(int n)
{
// Указатель на очередные данные в списке. Avia * pCurr = First;
// Если список пуст или элемента с таким номером нет,то возвращаем NULL.
if(pCurr == NULL || n>GetCount()-l)
{
return NULL;
}
// Добираемся до элемента с нужным номером.
for(int i=0; i<GetCount(); i++) {
if(i==n) {
return pCurr;
}
pCurr = pCurr->Next;
}
return NULL;
bool List::RemoveAvia(int nomer, int *datal)
{
// Если список пуст if(First == NULL)
{ соШ«"Списка нет"; return false;}
// Получаем элемент для удаления. Avia* pData = FindAvia(nomer, datal); // Если такого элемента в списке нет if(pData == NULL)
{ cout«"TaKoro элемента нет"; return false;
}
// Если удаляемый элемент - первый в списке.
if(pData == First)
{
First = pData->Next; delete pData; return true;
}
// Если удаляемый элемент - не первый в списке. GetPrev(pData)->Next = pData->Next; 
delete pData;
соиК<"Элемент удален"; return true;
main() {
List list; Avia *pData; char p[15], fio[15];
int n, namber, data[3]; bool flag=false; SetConsoleOutputCP( 1251);
while (1)
{
cout«"l Добавить 3anBKy"«endl; cout«"2 Показать все 3aHBKn"«endl; cout«"3 Поиск 3aHBKH"«endl; cout«"4 Удалить 3aflBKy"«endl; cout«"5 Bbixofl"«endl; cout«"n="; cin»n;
switch (n) {
case 1:
{
соиК<"Введите пункт назначения"«е1^1; cin»p;
cout«" В ведите ФИО nacca>icnpa"«endl; cin»fio;
cout«" В ведите номер pefica"«endl; cin»namber;
соиК<"Введите дату вылета"«епё1; соиК<"Число: "; cin»data[0]; соиК<"Месяц: "; cin»data[l]; cout«Tcw "; cin»data[2]; cout«endl;
pData = new Avia(p, fio, namber, data);
list.Add(pData);
break;
}
case 2:
{
list.ShowAll(); break;
}
case 3:
{
сои1«"Введите номер peiica"«endl; cin»namber;
сои1«"Введите дату BbuieTa"«endl; соиК<"Число: "; cin»data[0]; cout«"MecHu: "; cin»data[l]; соиК<"Год: "; cin»data[2];
cout«"\n";
list.FindAvia(namber, data); break;
case 4:
{
сои1«"Введите номер pefica"«endl; cin»namber;
сои1«"Введите дату BbmeTa"«endl; cout«"4Hono: "; cin»data[0]; cout«"MecHu: "; cin»data[l]; соиК<"Год: "; cin»data[2]; cout«"\n";
list.RemoveAvia(namber, data); break;
case 5:
return 0;
default:
cout«"TaKoro пункта меню нет. Повторите ввод"«епё1;
} }
return 0; 
№16 (подраздел 3.2)
Описать класс «множество», позволяющий выполнять основные операции над множествами - добавление и удаление элемента, определение членства, пересечение, объединение, разность и симметричная разность множеств.
Перегрузить операции: присваивания множеств (=), равенства и неравенства множеств.
Написать программу, демонстрирующую работу с этим классом. Программа должна содержать меню, позволяющее осуществить проверку всех методов класса.
Решение
#include <iostream.h> #include <windows.h> #include <math.h> #include <conio.h>
class Set {
public:
Set();
int count;  //количество элементов в множестве
int element[ 100]; //множество элементов
void set(); //задание элемента множества
void get(); //вывод множества
void addElement(); //добавить элемент в множество
void delElement(); //удалить элемент из множества
Set operator+(Set); //объединение
Set operator-(Set); //разность
Set operator*(Set); //пересечение
Set& operator=(Set);//nepenpHCBaHBaHne
bool operator==(Set);//cpaBHeHne на равенство
bool operator<(Set);//cpaBHeiiHe на неравенство
};
Set::Set() {
count=0;
\
i
void Set::set() {
соиК<"Введите количество элементов множества: "; cin»count;
for(int j=0; j<count;j++) {
cout«" В ведите элемент множества: "; cin»element[j];
}
void Set::get()
{
for (int i=0; i<count; i++) cout«element[i]«" "; cout«endl; 
void Set::addElement()
{
соиК<"Введите элемент множества: ";
cin»element[count];
count++;
void Set::delElement() {
int n;
соиК<"Введите номер элемента множества для удаления: "; cin»n;
for(int i=n; i<count-l; i++) element[i]=element[i+l]; count—;
Set Set::operator+(Set el)
{
Set tmp;
int ij, flag, n;
tmp.count=0;
for(i=0; i<count; i++) tmp.element[i]=element[i]; n=count;
for(i=0; i<el.count;i++)
{
flag = 0;
for(j=0; j<el.count;j++)
if (el.element[i]==tmp.element[j]) flag=l; if (flag==0) {tmp.element[n]=el.element[i]; n++;}
\
tmp.count=n; return tmp;
Set Set::operator*(Set el) {
Set tmp; int i,j, flag, n; tmp.count=0; n=0;
for(i=0; i<count;i++) {
flag = 0;
for(j=0; j<el.count;j++)
if (element[i]==el.element[j]) flag=l; if(flag==l) {tmp.element[n]=element[i]; n++;}
}
tmp.count=n; return tmp;
Set Set::operator-(Set el)
Set tmp;
int ij, flag, n;
n=0;
for(i=0; i<count;i++) {
flag = 0;
for(j=0; j<el.count;j++)
if (element[i]==el.element[j]) flag=l; if(flag==0) {tmp.element[n]=element[i]; n++;}
}
tmp.count=n;
return tmp;
}
Set& Set::operator=(Set el)
{
count=el. count;
for(int i=0; i<count;i++) element[i]=el.element[i]; return *this;
bool Set::operator==(Set el)
{
int flag;
if (el.count!=count) return false;
for(int i=0; i<count;i++)
{
flag = 0;
for(int j=0; j<el.count;j++)
if (element[i]==el.element!]]) flag=l; if (flag==0) return false;
}
return true;
bool Set::operator<(Set el)
{
if (count<=el.count) return true;
else
return false;
int main()
{
int menu; Set setl, set2;
SetConsoleOutputCP( 1251);
while (1)
{
cout«"\n\nMEHK)\n"; 
cout«"l. Сформировать множество\п"; cout«"2. Добавить элемент\п"; cout«"3. Удалить элемент\п"; cout«"4. Пересечение множеств\п"; cout«"5. Объединение множеств\п"; cout«"6. Разность множеств\п"; cout«"7. Переприсваивание множеств\п"; cout«"8. Сравнение на равенство множеств\п"; cout«"9. Сравнение на неравенство множеств\п"; cout«"10. Выход\п\п\п";
соШ«"Выберите пункт меню: ";
cin»menu;
if (menu=10) exit(O);
switch(menu)
{
case 1: {setl.set(); break;}
case 2: {set 1 .addElementQ; соШ«"Результат\п"; setl .get(); break;} case 3: {setl,delElement(); соиК<"Результат\п"; setl .get(); break;} case 4: {setl.set(); set2.set(); setl = setl*set2;
cout«"Pe3ynbTaT\n";setl.get(); break; } case 5: {setl ,set(); set2.set(); setl = setl+set2;
соШ«"Результат\п";5еИ^е1(); break; } case 6: {setl .set(); set2.set(); setl = setl-set2;
cout«"Pe3ynbTaT\n";setl.get(); break; } case 7: {setl .setQ; set2 = setl;
соиК<"Результат\п";5е12^е1(); break; } case 8: {setl.set(); set2.set();
if (setl==set2) сои1«"Множества равны";
else соШ«"Множества не равны"; break; } case 9: {setl .set(); set2.set();
if (setl<set2) соиК<"Первое множество меньше второго";
else соШ«"Первое множество больше второго"; break; } default:{cout«"TaKoro пункта меню нет. Повторите ввод "; break;}
} }
return 0; 
№13 (подраздел 3.3)
Создать абстрактный базовый класс Integer (целое) с виртуальными ариф метическими операциями и функцией вывода на экран. Определить производные классы Decimal (десятичное) и Binary (двоичное), реализующие собственные арифметические операции и функцию вывода на экран. Число представляется массивом, каждый элемент которого - цифра.
Решение
#include <iostream.h> #include <windows.h> #include <string.h>
class Integer {
public:
int figure[32], count;
virtual void sum(){}; //вирт. ф. суммы
virtual void diff(){}; //вирт. ф. разности
virtual void pro(){}; //вирт. ф. произведения
virtual void input(){}; //вывод
virtual void output(){}; //ввод
};
//                  
class Decimal : Integer
{
public:
void input()
{
char decimal[32]; int j;
for(int i=0; i<32; i++) figure[i]=0; сои1«"Введите десятичное число: "; cin»decimal; count=strlen(decimal); j=count-l;
for(i=31; i>31-count; i—)
{
figure[i]=decimal[j]-48;
void output()
{
for(int j=0; (j<32)&&(figure[j]==0); j++); for(int i=j; i<32; i++) cout«figure[i]; cout«endl;
void sum()
{
Decimal decimal2; decimal2.input(); for (int i=31; i>0; i--) 
{
figure[i]+=decimal2.figure[i]; figurefi-1 ]+=figure[i]/l 0; figure[i] %=10;
}
со1И«"Результат"; output();
void diff()
!
Decimal decimal2; decimal2.input();
for (int i=31; i>0; i-) {
if (figure[i]>=decimal2.figure[i]) figure[i]-=decimal2.figure[i];
else
{
figure[i]=figure[i]-decimal2.figure[i]+10;
figure[i-l]-=l;
}
}
cout«" Результат";
output(); }
void pro()
{
Decimal d2; d2.input();
int i, j, S, P; //S - Место для формирования двух цифр С-Разряд переноса Decimal W; //результат
if (count>d2.count) W.count=count; else W.count=d2.count; for(i=0; i<32; i++) W.figure[i]=0;
for (i=0; i<32; i++) // По цифрам числа d2
{
P=0; // Сначала переноса нет
for (j = 0; j<32; j++) //По цифрам числа d
{
S = figure[i]* d2.figure[j]+W.figure[i+j]+P;
W.figure[i+j] = S%10; // Временное значение очередной цифры Р = S/10; //Формирование разряда переноса
}
W.figure[j+i] = Р; //Старшая цифра частичного произведения
}
W.output();
//  -—  
class Binary : Integer
{
public:
void inputQ
{ 
char binary[32]; int j;
for(int i=0; i<32; i++) figure[i]=0; сои1«"Введите двоичное число: "; cin»binary; count=strlen(binary); j=count-l;
for(i=31; i>31 -count; i--)
{
if(binary[j]-48==0 || binary[j]-48==l)
{
figure[i]=binary[j]-48; j--;
}
else {
figure[i]=l; j-S
}
}
void output()
{
for(int j=0; (j<32)&&(figure[j]==0); j++); for(int i=j; i<32; i++) cout«figure[i]; cout«endl;
void sum()
{
Binary b2; b2.input();
for (int i=31; i>0; i-) {
figure[i]+=b2.figure[i]; figure[i-1 ]+=figure[i]/2; figurefi] %=2;
}
соиК<"Результат";
output(); }
void diff() {
Binary b2; b2.input();
for (int i=31; i>0; i~) {
if (figure[i]>=b2.figure[i]) figure[i]-=b2.figure[i];
else {
figure[i]=figure[i]-b2.figure[i]+2;
figure[i-l]-=l;
}
}
cout«" Резул ьтат"; 
output();
}
void pro()
{
Decimal d2; d2.input();
int i, j, S, P; //S - Место для формирования двух цифр С-Разряд переноса Decimal W; //результат
if (count>d2.count) W.count=count; else W.count=d2.count; for(i=0; i<32; i++) W.figure[i]=0;
for (i=0; i<32; i++) // По цифрам числа d2
{
P=0; // Сначала переноса нет
for (j = 0; j<32; j++) //По цифрам числа d {
S = figure[i]* d2.figure[j]+W.figure[i+j]+P;
W.figure[i+j] = S%10; // Временное значение очередной цифры
Р = S/10; //Формирование разряда переноса
}
W.figure[j+i] = Р; //Старшая цифра частичного произведения
}
W.output();
}
//— -—  —-      
main()
f
int menu; Decimal dl; Binary bl;
SetConsoleOutputCP( 1251);
while (1)
{
соиК<"\пДемонстрация работы с классом десятичных чисел\п"; cout«"l. сложение\п"; cout«"2. вычитание\п"; cout«"3. умножение\п";
сои1«"\пДемонстрация работы с классом двоичных чисел\п"; cout«"4. сложение\п"; cout«"5. вычитание\п"; cout«"6. умножение\п";
cout«"\n7. выход\п";
соШ«"Сделайте выбор: ";
cin»menu;
if (menu==7) exit(0);
switch(menu) {
case 1: {dl.inputQ; dl.sumQ; break;}
case 2: {dl.inputQ; dl.diff(); break;}
case3: {dl.input(); dl.pro(); break:}
case4: {bl.input(); bl.sumQ; break;}
case 5: {bl.input(); bl.diffQ; break;}
case 6: {bl.input(); bl.pro(); break;}
default:{cout«"TaKoro пункта меню нет\п"; break;}
} }
return 0; return 0; 
J^II ^подраздел j.-tj
Создать шаблон класса для работы с комплексными числами, обеспечивающий выполнение операций сложения, вычитания и умножения комплексных чисел. Написать программу, использующую этот шаблон, задавая вещественную и мнимую части как числами типа double, так и целыми числами.
Решение
#include <iostream.h> #include <windows.h> #include <math.h>
template <elass Type> class Complex
{
public:
Type Real, Image;
void add(Complex); //функция сложения void sub(Complex); //функция вычитания void mul(Complex); //функция умножения void del(Complex); //функция деления void Output();
void Input();
};
//определение функций для класса Complex
template <class Type> void Complex<Type>::add(Complex C2)
{
Real = Real + C2.Real; Image = Image + C2.Image ; Output();
}
template <class Type> void Complex<Type>:: sub(Complex C2) {
Real=Real -C2.Real; Image=Image -C2.Image ; Output();
template <class Type> void Complex<Type>:: mul(Complex C2)
{
Real=Real *C2.Real -Image *C2.Image; Image=Real*C2.Image+Image *C2.Real; OutputQ;
template <class Type> void Complex<Type>::del(Complex C2) {
Real=(Real *C2.Real+Image *C2.Image)/(pow(C2.Real,2)+pow(C2.Image,2)); Image=(-l)*(Real *C2.Image +Image *C2.Real)/(pow(C2.Real,2)+pow(C2.Image,2)); OutputQ;
template <class Type> void Complex<Type>::Input()
{
соШ«"Введите действительную часть числа: "; cin»Real;
соШ«"Введите мнимую часть числа: "; cin»Image;
}
template <class Туре> void Complex<Type>::Output() {
cout«"Результат: "«Real«"+x*"«Image«endl; }
//основная программа
main() {
int menu;
Complex<int> cintl, cint2; Complex<float> cfloatl, cfloat2; SetConsoleOutputCP( 1251);
while (1)
{
соиК<"\пДемонстрация работы с целыми числами\п";
cout«"l. сложение\п";
cout«"2. вычитание\п";
cout«"3. умножение\п";
cout«"4. деление\п";
соиК<"\пДемонстрация работы с вещественными числами\п";
cout«"5. сложение\п";
cout«"6. вычитание\п";
cout«"7. умножение\п";
cout«"8. деление\п";
cout«"\n9. выход\п";
соиК<"Сделайте выбор: ";
cin»menu;
if (menu==9) exit(O);
switch(menu) {
case 1: {cintl.Input(); cint2.Input(); cintl.add(cint2); break;} case 2: {cintl.Input(); cint2.Input(); cintl.sub(cint2); break;} case 3: {cintl.InputQ; cint2.Input(); cintl,mul(cint2); break;} case 4: {cintl.Input(); cint2.Input(); cintl.del(cint2); break; } case 5: {cfloatl .Input(); cfloat2.Input(); cfloatl ,add(cfloat2); break;} case 6: {cfloatl .Input(); cfloat2.Input(); cfloatl .sub(cfloat2); break;} case 7: {cfloatl .Input(); cfloat2.Input(); cfloatl ,mul(cfloat2); break;} case 8: {cfloatl .Input(); cfloat2.Input(); cfloatl ,del(cfloat2); break;} default: {соЩ«"Такого пункта меню нет\п"; break;}
} }
return 0; return 0; x
0
Buildog
40 / 40 / 2
Регистрация: 29.04.2012
Сообщений: 185
03.01.2013, 21:52 #10
По сути, тебе нужен просто шаблон односвязного списка, у которого 2 поля. Данные и указатель на следующий элемент. Данными может быть любой элемент, int, double или даже твой класс про билеты.
0
correcеt
-1 / 3 / 1
Регистрация: 20.04.2011
Сообщений: 412
03.01.2013, 21:59  [ТС] #11
Цитата Сообщение от Buildog Посмотреть сообщение
По сути, тебе нужен просто шаблон односвязного списка, у которого 2 поля. Данные и указатель на следующий элемент. Данными может быть любой элемент, int, double или даже твой класс про билеты.
По сути, тебе нужен просто шаблон односвязного списка, у которого 2 поля.
и как его сделать.....?
0
Nixy
ComfyMobile
400 / 281 / 8
Регистрация: 24.07.2012
Сообщений: 916
03.01.2013, 22:01 #12
correcеt,

Не по теме:

эх, не надо было пары прогуливать

0
correcеt
-1 / 3 / 1
Регистрация: 20.04.2011
Сообщений: 412
03.01.2013, 22:03  [ТС] #13
Цитата Сообщение от Nixy Посмотреть сообщение
correcеt,

Не по теме:

эх, не надо было пары прогуливать

ну так да,помогите пожалуйста .
0
Buildog
40 / 40 / 2
Регистрация: 29.04.2012
Сообщений: 185
03.01.2013, 22:04 #14
Ну это уже совсем базовые вещи. Для начала организуй класс односвязный список. Переделать его в шаблон не составит труда. Только для начала разберитесь, что такое шаблоны и как ими пользоваться.
0
correcеt
-1 / 3 / 1
Регистрация: 20.04.2011
Сообщений: 412
03.01.2013, 22:08  [ТС] #15
Цитата Сообщение от Buildog Посмотреть сообщение
Вот так допустим будет выглядеть файл .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
#pragma once
#include <iostream> //И остальные заголовочные, что нужны
 
template <class T>              // Шаблон класса aviabilets
class aviabilets {
private:
FILE *fp, *tp, *printer;
 int slots[MAX];
 int count;
 
public:
  nofind();      // Функция - неудачный поиск
  openrw();      // Открыть файл  для чтения
  openwr();      // Открыть файл для записи
  getslots();    // Функция определяющая - какие ячейки заняты
  getslot();     // Функция ввода новой ячейки
  adbilet();     // Добавление билета
  delbilet();    // Удаление данных билета из списка
  showbilet();   // Вывод билета на экран
  chbilet();     // Изменение данных билета
  chcell();      // Изменение номера ячейки
  sortcells();   // Порядок возрастания номеров ячеек
  loc_punkt();   // Поиск билета по пункту назначения
  loc_fio();     // Поиск по ФИО
  loc_datvl();   // Поиск по Дате вылета
  pbilets();     // Печать билетов
 
 };
 struct BZ                  // структура с полями записей
 {
  // private:
  char punktn[20];         // Пункт назначения
  char nreis[10];          // Номер рейса
  char fio[50];            // Фамилия и инициалы пассажира
  char datvl[10];          // Дата вылета
  int number;              // Номер ячейки в базе куда заносится данные
      } disc;              // запись.диск
 
// **********************************************
   template<class T>
   aviabilets<T>::nofind() // Функция - неудачный поиск
        {
         char pause;
         puts("\nПункт назначения с таким именем не найден");
         getche();
        // pause=getchar();
         return 0;
        }
// **********************************************
     template<class T>
     aviabilets<T>::openrw() // Открыть файл  для чтения
       {
        if((fp = fopen(FILENAME,"r")) == NULL)
         {
          printf("Невозможно открыть файл %s\n", FILENAME);
          exit(0);
         }
       if((tp = fopen(TEMPFILE,"w")) == NULL)
        {
          printf("Невозможно открыть файл %s\n", TEMPFILE);
          fclose(fp);
          exit(0);
        }
        return 0;
        }
а переделать мне лучше вот этот код?он же без шаблон,н правильный...верно?
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.01.2013, 22:08
Привет! Вот еще темы с ответами:

Шаблон класса. Ошибка `missing type specifier` - C++
Вот код: template &lt;int value, typename type&gt; class Class { public: type Array; type Metod(type x); };

Конструкторы template класса - C++
задача собственно написать класс, который создает массив произвольного типа и хранит указатель на него(это в упрощенном варианте) - вроде...

Метод класса возвращает template type - C++
надо создать метод который возвращает значение privat переменных разных типов. например я прикинул простинькую програмку: class...

Не получается создать template для класса - C++
Здравствуйте, делаю все, как написано в Интернете, а у меня вылетает ошибка runtime - unresolved externals. Не могу создать правильно...


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

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

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