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

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

Войти
Регистрация
Восстановить пароль
 
Левиафам
33 / 28 / 9
Регистрация: 31.05.2012
Сообщений: 530
#1

Шаблон класса - C++

24.12.2013, 16:06. Просмотров 499. Ответов 10
Метки нет (Все метки)

Привет товарищи. Тут в общем такая история, запилил шаблонный класс реализующий очередь , который работает на чарах, а вот на целочисленных значениях не хочет, кто подскажет в чем проблема???
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
#include <iostream>
#include <cassert> 
#include <conio.h>
using namespace std;
 
 
template<typename T>
class Queue
{
private:
    T *queuePtr;     // указатель на очередь
    const int size;  // максимальное количество элементов в очереди
    int begin,       // начало очереди
        end;         // конец очереди
    int elemCT;      // счетчик элементов
public:
    Queue(int);          // конструктор по умолчанию
    ~Queue();                // деструктор
    void outq(); // удалить элемент из очереди
    void inq(const T &); // добавить элемент в очередь
    void printq();
};
 
// реализация методов шаблона класса Queue
 
// конструктор по умолчанию
template<typename T>
Queue<T>::Queue(int sizeQueue) :
    size(sizeQueue), // инициализация константы
    begin(0), end(0), elemCT(0)
{
    queuePtr = new T[size ];
}
 
 
 
// деструктор класса Queue
template<typename T>
Queue<T>::~Queue()
{
    delete [] queuePtr;
}
 
// функция добавления элемента в очередь
template<typename T>
void Queue<T>::inq(const T &newElem)
{
    // проверяем, ести ли свободное место в очереди
    assert( elemCT < size );
 
    //добавление элемента
    queuePtr[end++] = newElem;
  
    elemCT++;
}
 
 
//функция вывода очереди
template<typename T>
void Queue<T>::printq()
{
    cout << "Очередь: ";
 
    if (end == 0 && begin == 0)
        cout << " пустая\n";
    else
    {
        for (int ix = begin; ix <= end; ix++)
            cout << queuePtr[ix] << " ";
        cout << endl;
    }
}
 
// функция удаления элемента из очереди
template<typename T>
void Queue<T>::outq()
{
    // проверяем, есть ли в очереди элементы
    assert( elemCT > 0 );
    queuePtr[begin]= queuePtr[begin++];
    elemCT--;
}
void main ()
{
    setlocale (LC_ALL, "Russian"); 
 
    Queue<char> myQueue(14); // объект класса очередь
 
    myQueue.printq(); // вывод очереди
 
    int ct = 1;
    char ch;
 
    // добавление элементов в очередь
    while (ct++ < 14)
    {
        cin >> ch;
        myQueue.inq(ch);
    }
 
    myQueue.printq(); // вывод очереди
 
  
    //для примера удаляем 3 элемента из очереди
    myQueue.outq();
    myQueue.outq();
    myQueue.outq();
 
 // вывод очереди
    myQueue.printq(); 
    getch();
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.12.2013, 16:06
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Шаблон класса (C++):

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

Шаблон класса, параметром которого должны являться наследники определённого класса - C++
Сразу извиняюсь за нубский вопрос. Суть в том, что я хочу сделать шаблон класса, параметром которого должны являтся наследники...

Шаблон класса (параметризация класса) - C++
Нужна помощь и советы!!! Англо-русский словарь построен как список. Каждая компонента содержит английское слово, соответствующее...

Создать шаблон некоторого класса, возможно, реализованного с применением некоторого серверного класса - C++
Добрый день, Уважаемые профессионалы. Прошу помочь в решении задачи. Честно говоря, я ничего не понимаю. И вот...решил...

Шаблон класса - C++
Столкнулся со следующей проблемой. Приведенный ниже шаблон класса коректно компилируется и работает пока находится в одном срр-шном файле...

Шаблон класса - C++
Пытаюсь освоить использование шаблонов класса. Не получается скомпилировать проект, если определение шаблона и main() находятся в разных...

10
ForEveR
В астрале
Эксперт С++
7980 / 4739 / 321
Регистрация: 24.06.2010
Сообщений: 10,543
Завершенные тесты: 3
24.12.2013, 16:11 #2
Левиафам, Что значит "не хочет"?
0
Левиафам
33 / 28 / 9
Регистрация: 31.05.2012
Сообщений: 530
24.12.2013, 16:14  [ТС] #3
это значит когда я меняю в проге тип char на int я запускаю прогу, заполняю её однозначными цифрами и он мне выдает мусор в двухзнвчных цифрах
0
aLarman
642 / 563 / 89
Регистрация: 13.12.2012
Сообщений: 2,109
24.12.2013, 16:18 #4
Цитата Сообщение от Левиафам Посмотреть сообщение
а вот на целочисленных значениях не хочет, кто подскажет в чем проблема???
а как понять не работает?
у меня скомплировалось и запустилось, вижу только одну ошибку
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
void Queue<T>::printq()
{
    cout << "Очередь: ";
 
    if (end == 0 && begin == 0)
        cout << " пустая\n";
    else
    {
        for (int ix = begin; ix <= end; ix++)// тут должно быть for (int ix = begin; ix < end; ix++)
            cout << queuePtr[ix] << " ";
        cout << endl;
    }
}
Добавлено через 56 секунд
Цитата Сообщение от Левиафам Посмотреть сообщение
мусор в двухзнвчных цифрах
а вы в мэйне тип переменной ch на int заменили? а то вы Чары читаете, ввели 5, и получили код символа, а он 2значный
0
Левиафам
33 / 28 / 9
Регистрация: 31.05.2012
Сообщений: 530
24.12.2013, 16:19  [ТС] #5
да вот так когда я ввожу чары например, "w e r t y u i" при удалении допустим двух цифр выдаст такой ответ "r t y u i".........а когда записываю числа " 1 2 3 4 5" он выдает так "50 60 78...и прочую ерунду"
0
ForEveR
В астрале
Эксперт С++
7980 / 4739 / 321
Регистрация: 24.06.2010
Сообщений: 10,543
Завершенные тесты: 3
24.12.2013, 16:23 #6
Левиафам, Это не ерунда. Это ASCII коды символов 1,2,3,4,5. main должен выглядеть так.

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
int main ()
{
    setlocale (LC_ALL, "Russian"); 
 
    Queue<int> myQueue(14); // объект класса очередь
 
    myQueue.printq(); // вывод очереди
 
    int ct = 1;
    int ch;
 
    // добавление элементов в очередь
    while (ct++ < 14)
    {
        cin >> ch;
        myQueue.inq(ch);
    }
 
    myQueue.printq(); // вывод очереди
 
  
    //для примера удаляем 3 элемента из очереди
    myQueue.outq();
    myQueue.outq();
    myQueue.outq();
 
 // вывод очереди
    myQueue.printq(); 
    getch();
}
1
Левиафам
33 / 28 / 9
Регистрация: 31.05.2012
Сообщений: 530
24.12.2013, 16:26  [ТС] #7
а можно поподробнее.....???
0
ForEveR
В астрале
Эксперт С++
7980 / 4739 / 321
Регистрация: 24.06.2010
Сообщений: 10,543
Завершенные тесты: 3
24.12.2013, 16:28 #8
Левиафам, Что подробнее-то? Вы вводите значение в переменную типа char и сохраняете его в Queue<int>, в итоге char '1' преобразуется в int 49.
0
Левиафам
33 / 28 / 9
Регистрация: 31.05.2012
Сообщений: 530
24.12.2013, 16:29  [ТС] #9
кстати спасибо, всё получилось....
0
aLarman
642 / 563 / 89
Регистрация: 13.12.2012
Сообщений: 2,109
24.12.2013, 16:29 #10
C++
1
2
3
4
5
6
7
8
сhar ch;
 
    // добавление элементов в очередь
    while (ct++ < 9)
    {
        cin >> ch;
        myQueue.inq(ch);
    }
ch это символ, вводите Вы цифру 5, а ее ASCII код эм...53? при вызове myQueue.inq(ch); используется версия ф-ции Queue<int>.inq(int &); и чар приведится к инту, т.е записывается код символа
0
Левиафам
33 / 28 / 9
Регистрация: 31.05.2012
Сообщений: 530
24.12.2013, 16:32  [ТС] #11
да, я понял проблему, просто нужно было тип другой указать, а так правильно
0
24.12.2013, 16:32
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.12.2013, 16:32
Привет! Вот еще темы с ответами:

Шаблон класса - C++
Приветствую. Есть задание: 1. Создать шаблон заданного класса. Определить перегруженную операцию присваивания (“=”) и операции, заданные...

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

шаблон класса - C++
Спроектировать шаблон класса. В основной программе создать соответствующие структуры простых и сложных структур и продемлонстрировать...

Шаблон класса - C++
Здравствуйте. Допустим есть шаблон класса: template &lt;typename T&gt; class M { M&lt;T&gt; operator* (const M &amp;m); //M operator*...


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Опции темы

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