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

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

Восстановить пароль Регистрация
 
Левиафам
 Аватар для Левиафам
31 / 26 / 5
Регистрация: 31.05.2012
Сообщений: 395
24.12.2013, 16:06     Шаблон класса #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
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();
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
24.12.2013, 16:11     Шаблон класса #2
Левиафам, Что значит "не хочет"?
Левиафам
 Аватар для Левиафам
31 / 26 / 5
Регистрация: 31.05.2012
Сообщений: 395
24.12.2013, 16:14  [ТС]     Шаблон класса #3
это значит когда я меняю в проге тип char на int я запускаю прогу, заполняю её однозначными цифрами и он мне выдает мусор в двухзнвчных цифрах
aLarman
636 / 557 / 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значный
Левиафам
 Аватар для Левиафам
31 / 26 / 5
Регистрация: 31.05.2012
Сообщений: 395
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...и прочую ерунду"
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 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();
}
Левиафам
 Аватар для Левиафам
31 / 26 / 5
Регистрация: 31.05.2012
Сообщений: 395
24.12.2013, 16:26  [ТС]     Шаблон класса #7
а можно поподробнее.....???
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
24.12.2013, 16:28     Шаблон класса #8
Левиафам, Что подробнее-то? Вы вводите значение в переменную типа char и сохраняете его в Queue<int>, в итоге char '1' преобразуется в int 49.
Левиафам
 Аватар для Левиафам
31 / 26 / 5
Регистрация: 31.05.2012
Сообщений: 395
24.12.2013, 16:29  [ТС]     Шаблон класса #9
кстати спасибо, всё получилось....
aLarman
636 / 557 / 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 &); и чар приведится к инту, т.е записывается код символа
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.12.2013, 16:32     Шаблон класса
Еще ссылки по теме:

C++ Шаблон класса
Шаблоны функций, Ошибка: для использования класса шаблон требуется список аргументов шаблон C++
Шаблон класса, параметром которого должны являться наследники определённого класса C++

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

Или воспользуйтесь поиском по форуму:
Левиафам
 Аватар для Левиафам
31 / 26 / 5
Регистрация: 31.05.2012
Сообщений: 395
24.12.2013, 16:32  [ТС]     Шаблон класса #11
да, я понял проблему, просто нужно было тип другой указать, а так правильно
Yandex
Объявления
24.12.2013, 16:32     Шаблон класса
Ответ Создать тему
Опции темы

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