Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.64/11: Рейтинг темы: голосов - 11, средняя оценка - 4.64
 Аватар для winst2008
2 / 2 / 1
Регистрация: 25.05.2012
Сообщений: 18

Инстанцирование шаблона для различных типов

22.02.2013, 19:53. Показов 2262. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Помогите пожалуйста с программой...
Нужно создать шаблон класса, для работы со структурой произвольного типа данных.
В функции main() показать использование созданного класса, включая ситуации, приводящие к генерации исключений; показать инстанцирование шаблона для различных типов (int, float, string).

queue.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
#pragma once
#include <string.h>
#include <iostream>
#include <conio.h>
 
using namespace std;
 
class queue
    {
    private:
        struct Point
        {
            int key;
            Point *next; 
        };
        Point *pervii_element; 
        Point *tecushii_element;
 
    public:
        queue();
        ~queue(void);
        void operator + (int);
        void operator - (int&);
        void print();
    };

queue.cpp
Кликните здесь для просмотра всего текста
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 "queue.h"
queue::queue(void)
{
    pervii_element = 0;
    tecushii_element = 0;
}
queue::~queue(void)
{
    if(pervii_element)//если список не пуст
    {
        tecushii_element=pervii_element;
    }
    while(pervii_element)//пока список не пуст
    {
        pervii_element=pervii_element->next;//взяли следующий элемент
        delete tecushii_element;//освобождение памяти.Удалили текущий
        tecushii_element=pervii_element;
    }
 
}
void queue::operator + (int a)
{
 
    Point* ph = new Point;
    ph->key=a;           //заполнение информатвного поля
    ph->next = 0;
    if (tecushii_element)
    {
        tecushii_element->next = ph;
        tecushii_element = tecushii_element->next;
    }
    else
    {
        pervii_element = ph;
        tecushii_element = ph;
    }
    cout << "Элемент добавлен";
 
}
void queue::operator - (int &a)
{
    if(pervii_element)
    {
   
    Point* ph = pervii_element;
    pervii_element = pervii_element->next;
    delete ph;
    if(pervii_element == NULL)
        tecushii_element = NULL;
    cout<<"Элемент успешно удален....";
    }
    else
    {
         cout<<"Список пуст!";  
    }
}
void queue::print()
{
    if(pervii_element)
    {
    Point* temp=pervii_element;
    cout<<"Список: ";
    while(temp)
    {
        cout << " " << temp->key;
        temp = temp->next;
    }
    cout << endl;
    }
    else
    {
        cout<<"Список пуст!";
    }
}

main.cpp
Кликните здесь для просмотра всего текста
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
#include "queue.h"
 
int main()
{
    setlocale(LC_ALL,"Russian");
    queue w; 
    int b=0,a;
    while(true)
    {
        cout << "1) Добавить элемент в конец очереди"<<endl;
        cout << "2) Вывести на экран очередь"<<endl;
        cout << "3) Извлечь элемент из начала очереди(удалить)"<<endl;
        cout << "4) Выход"<<endl<<endl;
        cout << "Ввод: "; 
        cin >> b;
        switch(b)
        {
        case 1 : 
        
            system("cls");
            cout<<"Введите значение: ";
            cin>>a;
            w+a;
            system("cls");
            continue;
        
        case 2:
 
                system("cls");
                w.print();
                getch();
                system("cls");
                continue;
 
        case 3:
        
                system("cls");
                w-a;
                getch();
                system("cls");
                continue;
        
        case 4:
        
                 break;
        
        default: cout<<"Error!"<<endl<<endl;
                 continue;
        }
        break;
    }
    return 0;
}
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
22.02.2013, 19:53
Ответы с готовыми решениями:

Инстанцирование шаблона
Существует шаблон следующего вида: template&lt;class T, int size&gt; void foo(T (&amp;array)) { cout &lt;&lt; size &lt;&lt; endl; } И следующий...

Инстанцирование шаблона
Есть шаблонная очередь с использованием vector Как инстанцировать для своего класса, представляющего строку, изготовленную из...

Инстанцирование шаблона во время выполнения
Добрый вечер! Компилятор требует константное выражение передаваемое в шаблон, как это можно обойти? мб с помощью каких то заклинаний над...

3
_
317 / 151 / 27
Регистрация: 08.10.2011
Сообщений: 432
22.02.2013, 20:07
в чем сложности то?
в файле .h добавляете template < class T > перед определением класса, заменяете int на T
в файле .cpp добавляете temlate < class T > перед каждой функцией, заменяете int на T и заменяете queue:: на queue< T >::
в файле main.cpp меняете тип queue на queue< int > или queue< float > или queue< string >
1
 Аватар для winst2008
2 / 2 / 1
Регистрация: 25.05.2012
Сообщений: 18
23.02.2013, 11:36  [ТС]
Блин не доходит до меня =(
0
 Аватар для winst2008
2 / 2 / 1
Регистрация: 25.05.2012
Сообщений: 18
24.02.2013, 14:26  [ТС]
Окей, как подставлять значения по одному разобрался, а на лету их отлавливать реально?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
24.02.2013, 14:26
Помогаю со студенческими работами здесь

Специализация шаблона для стандартных типов
Пишу динамическую структуру данных (не суть важно какую, допустим для простоты стек). Она работает с объектами типа Box, которые: 1....

Щаблон для различных типов одномерных массивов
Общая постановка. Даны: число N и последовательность a1, a2, … aN. Создать шаблон класса, порождающий динамические одномерные массивы с...

Класс динамического массива для различных типов
Можно ли создать класс динамического массива, чтоб при создании массива можно было бы задать размер и тип массива. Например что-то типа...

Использование шаблона типов
Прочитал про шаблоны типов, интересный и полезный инструмент, но есть несколько вопросов о кухне данного инструмента. Есть класс...

Возвращение различных типов данных
Привет. Есть необходимость реализации обработки различных типов данных. Имеются 3 различных структуры, необходимо реализовать их чтение,...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru