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

Работы с фабрикой объектов - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Declaretion syntax error http://www.cyberforum.ru/cpp-beginners/thread156692.html
Всем привет! Не могу понять в чем проблема. Пишет "Declaretion syntax error" при компиляции на 8-стоке. Объясните почему. #include <vcl.h> #include <iostream.h> #include <conio.h> #pragma hdrstop //--------------------------------------------------------------------------- int multiply(int, int) void showResult(int)
C++ Максимальная длина целочисленного типа Максимальная длина __int64 - 18.446.744.073.709.552.046 Максимальная длина __int128 - 340.282.366.920.938.586.008.062.602.462.446.642.046 Последнего типа официально еще нет, но в limits.h он описан... Возник вопрос. Как это прочитать? Причем, если кто знает желательно по разрядам, то есть сотни, тысячи, миллионы ect. __int64 - 18 квинтиллионов 446 квадриллионов 744 триллиона 73 миллиарда... http://www.cyberforum.ru/cpp-beginners/thread156679.html
2 разных интервала C++
Получается что я код написал для 2 одинаковых интервалов, а как сделать чтобы было правильно для 2 разных:wall:#include <stdafx.h> #include <cmath> #include <iostream> #include <iomanip> using namespace std; void main() { float x, y ,a; for (x=1; x<=8; x+=.5) {
C++ Как вывести на экран несколько раз
В задании надо чтобы целое значение (b) вводилось с клавиатуры 4 раза, соответственно потом (x) и (y) выводятся на экран после каждого ввода вот код: #include <stdafx.h> #include <cmath> #include <iostream> #include <iomanip> using namespace std; void main() { int b;
C++ Вопрос про конструктор http://www.cyberforum.ru/cpp-beginners/thread156661.html
цитата исходного кода из книги: class stock{ ... public: stock(); //Типа объявление конструктора по умолчанию чтоли... stock(int a,int b); //вот настоящий пользовательский конструктор
C++ "no appropriate default constructor available" Начал писать класс и попытался скомпилировать проект... class TMyGame: public TGame{ public: TMyGame(char *WorldFileName, char **Model, unsigned ModelCount, char *TexturesFileName); }; TMyGame::TMyGame(char *WorldFileName, char **Model, unsigned ModelCount, char *TexturesFileName) { LoadPrimitives(WorldFileName, World); подробнее

Показать сообщение отдельно
alexsvk
8 / 8 / 1
Регистрация: 15.07.2010
Сообщений: 255
31.07.2010, 18:48     Работы с фабрикой объектов
Нужно создать иерархию классов с абстрактным классом DataStruct на её вершине. В основании иерархии создать два проиводных класса. В одном - стек, во-втором - очередь. Так же должна быть фабрика создания объектов DataStructFactory(), которая должна создавать стек, если параметр метка... и т.д.
Привожу свой код. Вопрос у меня в следующем: для каждого производного класса создаю конструкторы, но при этом размер стека и очереди хранится в базовом классе. Когда функция, фабрика объектов, возвращает новый тип данных указателю на базовый класс в основной программе, то как создать объект с параметрами на основе этого указателя, ведь он не будет ничего создавать, а только лишь указывать на один из производных классов? Другими словами, как мне создавать новые стек и очередь с вызовом конструктора, при этом пользуясь этой функцией, указанной в задании?

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
//stdafx.h
 
#include "DataStruct.h"
#include "Stack.h"
#include "Queue.h"
 
#include <iostream>
#include <cstdlib>
#include <typeinfo>
#include <iomanip>
using namespace std;
 
DataStruct* DataStructFactory(char);
ostream& prank(ostream&);
ostream& chtp(ostream&);
 
//stdafx.cpp
 
ostream& prank(ostream& stream)
{
    stream<<"Press any key to continue...";
 
    return stream;
}
 
ostream& chtp(ostream& stream)
{
    stream<<setw(strlen("Choose the type of your data structure...\n\n")/2)<<"Choose the type of your data structure...\n\n";
    stream<<"Double - d\n";
    stream<<"Int - i\n";
    stream<<"Char - c\n-> ";
 
    return stream;
}
 
DataStruct* DataStructFactory(char ch)
{
    try {
        if (ch == 's')
            return new Stack;
        else 
            return new Queue;
    }
 
    catch (bad_alloc ba) {
        cout<<"Memory allocation error!\n";
        return NULL;
    }
 
    return NULL;
}
 
 
 
// Описание классов
 
template <class StructType> class DataStruct  
{
protected:
    int size;
public:
    DataStruct() {}
    DataStruct(int s) 
    {
        size = s;  
    }
    virtual ~DataStruct() { delete [] arr; }
 
    virtual void put(StructType) = 0;
    virtual StructType get(bool&) = 0;
    virtual StructType show() = 0;
};
 
template <class StructType> class Queue  : public DataStruct<StructType>
{
    int tail, head;
    StructType q;
public:
    Queue() {}
    Queue(int): DataStruct<StructType> (int); 
    virtual ~Queue()
 
    void put(StructType);
    StructType get(bool&);
 
};
Queue::~Queue()
{
    delete [] queue;
}
 
template <class StructType>
Queue Queue<StructType>::Queue(int s): DataStruct<StructType>(s)
{
    tail = head = 0;
 
    try {
        q = new StructType [size];
    }
 
    catch (bad_alloc ba) {
        system("cls");
        cout<<"Memory allocation error!\n";
        exit(1);
    }
}
 
template <class StructType>
void Queue<StructType>::put(StructType sym)
{
    try {
        if ((tail + 1 == size && head == 0) || tail + 1 == head)
            throw 0;
    }
 
    catch (int) {
    {
        cout<<"The queue is full!\n";
        return;
    }
 
    tail++;
 
    if(tail == size) tail = 0;
 
    q[tail] = sym;
 
}
 
template <class StructType>
StructType Queue<StructType>::get(bool &f)
{
 
    try {
        if (head == tail) throw 0;
    }
 
    catch (int) {
        f = false;
        cout<<"The queue is empty!\n";
        return 0;
    }
 
    head++;
 
    if (head == size) head = 0;
 
    return q[head];
 
}
 
 
 
template <class StructType> class Stack  : public DataStruct<StructType>
{
    int tos;
    StructType stck;
public:
    Stack() {};
    Stack(int): DataStruct<StructType>(int);
    virtual ~Stack();
 
    void put(StructType);
    StructType get(bool&);
 
};
Stack::~Stack()
{
    delete [] stck;
}
 
template <class StructType>
Stack Stack<StructType>::Stack(int s): DataStruct<StructType>(s)
{
    tos = 0;
 
    try {
        stck = new StructType [size];
    }
 
    catch (bad_alloc ba) {
        system("cls");
        cout<<"Memory allocation error!\n";
        exit(1);
    }
}
 
template <class StructType>
void Stack<StructType>::put(StructType sym)
{
    try {
        if(tos == size) throw 0;
    }
 
    catch (int) {
    {
        cout<<"The stack is full!\n";
        return;
    }
 
    stck [tos] = sym;
 
    tos++;
}
 
template <class StructType>
StructType Stack<StructType>::get(bool &f)
{
    try {
        if (!tos) throw 0;
    }
 
    catch (int) {
        f = false;
        cout<<"The stack if empty!\n";
        return 0;
    }
 
    tos --;
 
    return stck [tos];
}

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
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
// Ch12_main_3.cpp : Defines the entry point for the console application.
//
 
#include "stdafx.h"
 
 
int main(int argc, char* argv[])
{
    char c = '0'; int i = 0; double d = 0;
 
    char ch;
    bool flag = true;
    char type;
    int sz;
 
    do{
        system("cls");
        cout<<"Create stack - s\n";
        cout<<"Create queue - q\n";
        cout<<"Press Esc to exit\n-> ";
        fflush(stdin);
        cin>>ch;
 
        switch (ch)
        {
            case 's':
            {
                for(;;)
                {
                    do{
                        system("cls");
                        cout<<chtp;
                        fflush(stdin);
                        cin>>type;
                    }while(type != 'd' || type != 'i' || type != 'c')
                    
                    system("cls");
                    cout<<"Enter the size of stack: ";
                    fflush(stdin);
                    cin>>sz;
                    
                    if(type == 'd')
                        Stack<double> ob(sz);
                    else 
                        if (type == 'i')
                            Stack<int> ob(sz);
                        else
                            Stack<char> ob(sz);
                        
                    p = DataStructFactory(ch);
 
                    for(;;)
                    {
                        system("cls");
                        cout<<"Pop from stack - g\n";
                        cout<<"Push in stack p\n";
                        cout<<"Press Esc to proceed in the main menu\n-> ";
                        fflush(stdin);
                        cin>>ch;
 
                        if (ch == 27)
                            break;
                        
                        if (ch == 'g')
                        {
                            system("cls");
                            if(type == 'd') 
                            {
                                d = p->get(flag);
                                if(flag)
                                    cout<<"Symbol from stack: "<<d<<"\n";
                                cout<<prank;
                                getch();
                            }
                            else 
                                if (type == 'i')
                                {
                                    i = p->get(flag);
                                    if(flag)
                                        cout<<"Symbol from stack: "<<i<<"\n";
                                    cout<<prank;
                                    getch();
                                }
                                else
                                {
                                    c = p->get(flag);
                                    if(flag)
                                    cout<<"Symbol from stack: "<<c<<"\n";
                                    cout<<prank;
                                    getch();
                                }
                        }
                        else
                            if (ch == 'p')
                            {
                                system("cls");
                                cout<<"Enter the symbol: ";
                                fflush(stdin);
                                if (type == 'i')
                                {
                                    cin>>i;
                                    p->put(i);
                                }
                                else 
                                    if (type == 'd')
                                    {
                                        cin>>d;
                                        p->put(d);
                                    }
                                    else
                                    {
                                        cin>>c;
                                        p->put(c);
                                    }
                                cout<<prank;
                                getch();
                            }
                    }
                }   
            }
            break;
 
            case 'q'
            {
                for(;;)
                {
                    do{
                        system("cls");
                        cout<<chtp;
                        fflush(stdin);
                        cin>>type;
                    }while(type != 'd' || type != 'i' || type != 'c')
                    
                    system("cls");
                    cout<<"Enter the size of queue: ";
                    fflush(stdin);
                    cin>>sz;
                    
                    if(type == 'd')
                        Queue<double> ob(sz);
                    else 
                        if (type == 'i')
                            Queue<int> ob(sz);
                        else
                            Queue<char> ob(sz);
                        
                    p = DataStructFactory(ch);
                    
 
                    for(;;)
                    {
                        system("cls");
                        cout<<"Get element from queue - g\n";
                        cout<<"Add element in queue - p\n";
                        cout<<"Press Esc to proceed in the main menu\n-> ";
                        fflush(stdin);
                        cin>>ch;
 
                        if (ch == 27)
                            break;
                        
                        if (ch == 'g')
                        {
                            system("cls");
                            if(type == 'd') 
                            {
                                d = p->get(flag);
                                if(flag)
                                    cout<<"Symbol from queue: "<<d<<"\n";
                                cout<<prank;
                                getch();
                            }
                            else 
                                if (type == 'i')
                                {
                                    i = p->get(flag);
                                    if(flag)
                                        cout<<"Symbol from queue: "<<i<<"\n";
                                    cout<<prank;
                                    getch();
                                }
                                else
                                {
                                    c = p->get(flag);
                                    if(flag)
                                    cout<<"Symbol from queue: "<<c<<"\n";
                                    cout<<prank;
                                    getch();
                                }
                        }
                        else
                            if (ch == 'p')
                            {
                                system("cls");
                                cout<<"Enter the symbol: ";
                                fflush(stdin);
                                if (type == 'i')
                                {
                                    cin>>i;
                                    p->put(i);
                                }
                                else 
                                    if (type == 'd')
                                    {
                                        cin>>d;
                                        p->put(d);
                                    }
                                    else
                                    {
                                        cin>>c;
                                        p->put(c);
                                    }
                                cout<<prank;
                                getch();
                            }
                    }
            }
            break;
        }
    
    }while(ch != 27);
 
    delete [] p;
 
    return 0;
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 08:32. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru