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

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

Войти
Регистрация
Восстановить пароль
 
Valeriy147
0 / 0 / 0
Регистрация: 24.11.2014
Сообщений: 2
#1

[Классы, Наследование, Шаблоны] Добавление записи в список - C++

29.11.2014, 23:27. Просмотров 344. Ответов 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
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
#include <iomanip>
#include <stdlib.h>
#include <stdio.h>
#include <iostream>
#include <string.h>
#include <conio.h>
#include <Windows.h>
using namespace std;
 
template <class E, class T>
class Library
{
protected:
    E * adress;
public:
    virtual ~Library()
   {
        delete [] adress;
   }
};
 
template <class E,class T>
class Game_hall: public Library<E,T>
{
private:
    E * game_office;
    T number;
    T time;
    T cash;
    T size;
public:
    Game_hall *Head,*Tail,*Next;
    void Add();
    void Show(const T count);
    ~Game_hall()
    {
        delete [] game_office;
    }
};
 
template<class E,class T> void Game_hall<E,T>::Add()
{
    system("cls");
    E A[50];
    T B = 0, C = 0, D = 0;
    cout<<"\n\t\t\tДобавление компьютера:"<<endl;
    cout<<"\n\tТип компьютера(Игровой/Офисный): ";
    fflush(stdin);
    gets(A);
    while((strcmp(A,"Игровой")!=0)&&(strcmp(A,"Офисный")!=0))
    {
        cout<<"\tТип компьютера(Игровой/Офисный): ";
        fflush(stdin);
        gets(A);
    }
    while(B<1)
    {
         while(true)
        {
            cout<<"\tНомер компьютера: ";
            cin >> B;
            if ( cin.peek() == '\n' )
            {
                cin.get();
                break;
            }
            else
            {
                cin.clear();
                while ( cin.get() != '\n' ) {}
            }
        }
    }
    while(C<1)
    {
        while(true)
        {
            cout<<"\tДлительность сеанса(мин): ";
            cin >> C;
            if ( cin.peek() == '\n' )
            {
                cin.get();
                break;
            }
            else
            {
                cin.clear();
                while ( cin.get() != '\n' ) {}
            }
        }
    }
    while(D<1)
    {
        while(true)
        {
            cout<<"\tСтоимость(руб): ";
            cin >> D;
            if ( cin.peek() == '\n' )
            {
                cin.get();
                break;
            }
            else
            {
                cin.clear();
                while ( cin.get() != '\n' ) {}
            }
        }
    }
    static int count = 0;
    Game_hall *temp = new Game_hall;
    Next=temp->Head;
    temp->game_office = new E [strlen(A)+1];
    strcpy(temp->game_office,A);
    temp->number = B;
    temp->time = C;
    temp->cash = D;
    temp->adress = new E [15];
    strcpy(temp->adress,"ul. Odincova 52");
    fflush(stdin);
    if (Head!=NULL) // ---------------------------------------- ПОСЛЕ ПРОИСХОДИТ ВЫЛЕТ ПРОГРАММЫ.
    {
        Tail->Next=temp;
        Tail=temp;
    }
    else
    {
        Head=Tail=temp;
    }
    count++;
    size=count;
    Tail->Next=Head;
}
 
template<class E,class T> void Game_hall<E,T>::Show(const T count)
{
    Game_hall *temp=Head;
    for (T i=0;i<count;i++)
    {
        cout<<"\n\t\tТип компьютера: "<<temp->game_office<<endl;
        cout<<"\t\Номер:       "<<temp->number<<endl;
        cout<<"\t\Длительность сеанса(мин): "<<temp->time<<endl;
        cout<<"\t\tСтоимость(руб): "<<temp->cash<<endl;
        temp=temp->Next;
    }   cout<<"\n";
}
 
 
int main()
{
    setlocale(0, "");
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    Game_hall <char,int> game_hall; int Count_game_hall = 0;
    int ABS = 1;
    while(1)
    {
        cout << "\n\n\t\t\tГлавное меню (LISTS):\n\n\t\t1. Добавить компьютер\n\t\t2. Показать компьютеры\n\t\t3. Create book[-]\n\t\t4. View computer[-]\n\t\t5. View press[-]\n\t\t6. View book[-]\n\t\t7. Set adress book[-]\n\t\t8. Set cash computer[-]\n\t\t9. Set cash and minute computer[-]\n\t\t10. Exit\n\n";
        while(true)
        {
            cout << "\t\tВведите значение: ";
            cin >> ABS;
            if ( cin.peek() == '\n' )
            {
                cin.get();
                break;
            }
            else
            {
                cin.clear();
                while ( cin.get() != '\n' ) {}
            }
       }
       if(ABS == 1)
       {
            game_hall.Add(); Count_game_hall ++ ;
       }
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.11.2014, 23:27
Здравствуйте! Я подобрал для вас темы с ответами на вопрос [Классы, Наследование, Шаблоны] Добавление записи в список (C++):

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

Наследование и шаблоны - C++
Почему при использовании шаблонов при обращении к элементам класса нужно явно указывать потомка или this? Ведь при наследовании без...

Наследование и шаблоны - C++
Доброе время суток. Есть три класс: interface.h template &lt;class T&gt; class interface { public: ...

Шаблоны и наследование - C++
Есть код с учебника: #include &lt;iostream&gt; #include &lt;typeinfo&gt; #include &lt;cstdlib&gt; #include &lt;ctime&gt; template &lt;class T&gt; class...

Наследование и шаблоны - C++
Доброго времени суток всем! Требуется внести ясность в следующую задачу. Существует абстрактный класс AbstractGenerator&lt;имя типа&gt; (не...

Наследование и шаблоны - C++
Здравствуйте. У меня возникла проблема. Есть 4 класса: Father - абстрактный шаблонный класс (типа интерфейс) Son - его потомок с...

1
Max Dark
шКодер самоучка
1849 / 1649 / 603
Регистрация: 09.10.2013
Сообщений: 3,678
Записей в блоге: 6
Завершенные тесты: 2
30.11.2014, 10:24 #2
Valeriy147, отсутствует инициализация членов классов, и, как следствие, они содержат мусор.
Я не вижу смысла делать Library шаблоном 2х параметров - 2й не используется.
Кроме того, весь ввод/вывод в Game_hall у Вас завязан на тип char(strcpy, cin, cout и тд) а это делает бесполезным первый параметр шаблона - с другими типами это просто не соберется.

Добавлено через 9 часов 21 минуту
+ список это контейнер, он не должен знать о логике программы.
Я бы создал на вашем месте 3 класса: шаблонный список - контейнер, класс описания - элемент списка, и отдельный класс - логика программы
У Вас же все эти понятия смешаны в одну большую кучу - список является элементом самого себя и логика находится в нем же
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.11.2014, 10:24
Привет! Вот еще темы с ответами:

Наследование и шаблоны - C++
Не понимаю почему выдается ошибки, переменные а, b не объявлены в данном контексте (внутри функции f) Сейчас почитал прату, и...

Функциональные шаблоны и наследование - C++
#include &lt;list&gt; using namespace std; class A { public: virtual void doit() =0; };

Классы и наследование (Создать класс 3D фигура, и производные классы шар, конус, цилиндр и куб. Создать функцию вычисления объёма.) - C++
Уважаевые, помогите написать прожку на экзамене: Создать класс 3D фигура, и производные классы шар, конус, цилиндр и куб. Создать функцию...

Шаблоны, наследование и размер типа - C++
Суть вопроса в том, что имея два шаблона класса, унаследованных от общего предка, и инстанциируя &quot;один другим&quot; имеем + n байт к размеру...


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

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

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