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

класс "очередь параметров" - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.90
pavlovnik
41 / 22 / 4
Регистрация: 07.12.2011
Сообщений: 114
20.01.2012, 00:17     класс "очередь параметров" #1
вот такое задание дали...но запоминаем что сразу делаем с динамической памятью.
1. Разработать класс "очередь параметров" в соответствии со следующим заданием:
Состояние класса -
Очередь параметров представляется в виде вектора (массива). Параметром очереди могут быть данные сложного типа, например, первое поле число, второе поле строка символов фиксированной длины. Для описания параметра очереди целесообразно использовать структуру. Память под массив выделяется статически, во время компиляции, и задается массивом фиксированного размера.
Протокол класса -
Определяет возможности создания и инициализации экземпляров класса и правила их использования (методы класса).
Предусмотреть следующие возможности:
• создание экземпляров структуры (параметра) с инициализацией начальным состоянием по умолчанию;
• пустой конструктор для инициализации экземпляров и массивов экземпляров класса (очереди) по умолчанию;
• создание экземпляров класса (очереди) с инициализацией заданным количеством параметров из массива параметров;
• ввод значения параметра из входного потока (с помощью перегруженного оператора >> );
• ввод (добавление) параметра в очередь из входного потока (с помощью перегруженного оператора >> );
• вывод значения параметра в выходной поток (с помощью перегруженного оператора << );
• вывод содержимого очереди (в порядке следования) в выходной поток (с помощью перегруженного оператора << );
• добавление параметра, заданного переменной, в очередь (с помощью перегруженного оператора += );
• выборка параметра из очереди – копирование параметра в переменную соответствующего типа с удалением из очереди (с помощью перегруженного оператора ( ) );
• проверка состояния очереди (пуста, частично заполнена или полна).
3. Повторить разработку класса при условии, что память под строку символов в параметре и массив структур необходимой длины выделяется динамически, во время выполнения программы (с помощью оператора new; память задается указателем на char в структуре и указателем на структуру в состоянии класса).
Дополнить интерфейс класса следующими возможностями:
• ввести в состояние класса размер очереди, который всякий раз при переполнении очереди увеличивать;
• память под данные поля информации выделять динамически с помощью оператора new;
• создание экземпляра класса (очереди) с его инициализацией другим экземпляром класса (копирующий конструктор) для параметра и очереди;
• переопределение экземпляра класса (с помощью перегруженного оператора присваивания) для параметра и очереди.
4. Написать прикладную программу, использующую разработанный класс.



вот что я навоял, но хочу чтобы работало,посмотрите ошибки и с программой которая функции все проверяет помогите(
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
#include <iostream>
 
using namespace std;
 
struct elem
{
    int num;
    char *str;
 
 
    elem();
    elem(elem &e);
    elem& operator=(elem & e);
 
    friend istream & operator>>(istream&is,elem& e);
    friend ostream & operator<<(ostream&os,elem& e);
 
};
    class queue
    {
    private:
        int len;
        elem *mas;
        
    public:
        queue();
        queue(int n);
        queue(int n, elem *m);
 
        queue(queue &q);
        queue& operator=(queue &e);
        ~queue();
        
        queue& operator+=(elem e);
        void operator()(int pos, elem e);
        void ochered(queue & q);
 
        friend istream & operator>>(istream&is,queue& q);
        friend ostream & operator<<(ostream&os,queue& q);
    };
 
 
#include <iostream>
#include "classs.h"
using namespace std;
 
 
elem::elem()
{
    num=0;
    str=new char[80];
}
 
elem::elem(elem &e)
{
    num=e.num;
    str=new char[num];
    for(int i=0; i<num; i++)
        str[i]=e.str[i];
}
 
elem & elem::operator=(elem &e)
{
    if(this==&e)
        return *this;
    delete[] str;
    num=e.num;
    str=new char[num];
    for(int i=0;i<num;i++)
        str[i]=e.str[i];
    return *this;
}
 
 
istream & operator>>(istream&is,elem& e)
{
    cout<<"Ââåäèòå Г*îìåð: ";
    is>>e.num;
    cout<<"Ââåäèòå ïîëå ГЁГ*ГґГ®: ";
    is>>e.str;
    return is;
}
 
ostream & operator<<(ostream&os,elem& e)
{
    os<<e.num<<' '<<e.str<<endl;
    return os;
}
 
 
//ГЄГ«Г*Г±Г±
 
queue::queue()
{
    len=0;
    mas=0;
}
 
queue::queue(int n)
{
    len=n;
    mas=new elem[len];
}
 
queue::queue(int n, elem * m)
{
    len=n;
    mas=new elem[len];
    for(int i=0;i<len; i++)
        mas[i]=m[i];
 
}
 
queue::queue(queue &q)
{
    len=q.len;
    mas= new elem[len];
    for(int i=0; i<len; i++)
        mas[i]=q.mas[i];
}
 
queue & queue::operator=(queue &q)
{
    if(this==&q)
        return *this;
    delete []mas;
    len=q.len;
    mas=new elem[len];
    for(int i=0; i<len; i++)
        mas[i]=q.mas[i];
    return *this;
}
queue::~queue()
{
    delete[] mas;
}
 
 
istream & operator>>(istream&is,queue& q)
{
    for(int i=0;i<q.len;i++)
        is>>q.mas[i];
    return is;
 
}
 
ostream & operator<<(ostream&os,queue& q)
{
    for ( int i=0; i<q.len;i++)
        os<<q.mas[i];
return os;
};
 
queue & queue::operator+=(elem e)
{
    queue q(len+1,mas);
    mas[len]=e;
    delete[]mas;
    len=q.len;
    mas=new elem[len];
    for(int i=0;i<len; i++)
        mas[i]=q.mas[i];
    return *this;
};
 
 
void queue::operator()(int pos, elem e)
{queue q(len-1);
    for(int i=0;i<pos;i++)
        q.mas[i]=mas[i];
    e=mas[pos];
    for(int i=0;i<len;i++)
        q.mas[i]=mas[i];
    delete[] mas;
    len=q.len;
    mas=new elem[len];
    for(int i=0; i<len; i++)
        mas[i]=q.mas[i];
}
 
void queue::ochered(queue & q)
{
    int n=5;
    if(q.len=0)
      cout<<"Î÷åðåäü ГЇГіГ±ГІГ*"<<endl;
    else if(q.len=n)
        cout<<"Î÷åðåäü Г§Г*ïîëГ*ГҐГ*Г*"<<endl;
    else 
        cout<<"Г…Г±ГІГј ìåñòî"<<endl;
 
}
 
 
 
 
 
 
int main()//самая печалька
{   
    setlocale(LC_ALL, "Russian");
    elem *m=new elem[2];
    for(int i=0; i<2; i++)
        cin>>m[i];
    queue q(2,m);
    cout<<q;
    system("pause");
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
NoMasters
Псевдослучайный
1740 / 1083 / 70
Регистрация: 13.09.2011
Сообщений: 3,104
20.01.2012, 00:35     класс "очередь параметров" #2
Кхм... Зачем elem структура, если ты хочешь, чтобы у него были методы?
pavlovnik
41 / 22 / 4
Регистрация: 07.12.2011
Сообщений: 114
20.01.2012, 11:47  [ТС]     класс "очередь параметров" #3
Цитата Сообщение от NoMasters Посмотреть сообщение
Кхм... Зачем elem структура, если ты хочешь, чтобы у него были методы?
задание,целесообразно использовать структуру...по заданию сделал,поле 1 - число,второе - хрень...ну и по заданию инициализация отдельно структуры,отдельно класса

Добавлено через 11 часов 7 минут
опять же вроде на словах красиво выглядит, но не работает...и нету программы проверяющей все дела
retmas
Жарю без масла
831 / 713 / 156
Регистрация: 13.01.2012
Сообщений: 1,637
20.01.2012, 12:29     класс "очередь параметров" #4
Цитата Сообщение от pavlovnik Посмотреть сообщение
посмотрите ошибки
Цитата Сообщение от pavlovnik Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
9
10
11
void queue::ochered(queue & q)
{
        int n=5;
        if(q.len=0)
      cout<<"Очередь пуста"<<endl;
        else if(q.len=n)
                cout<<"Очередь заполнена"<<endl;
        else 
                cout<<"Есть место"<<endl;
 
}
в условиях if q.len== писать надо
pavlovnik
41 / 22 / 4
Регистрация: 07.12.2011
Сообщений: 114
20.01.2012, 13:22  [ТС]     класс "очередь параметров" #5
Цитата Сообщение от retmas Посмотреть сообщение
в условиях if q.len== писать надо
о,согласен,учел)
retmas
Жарю без масла
831 / 713 / 156
Регистрация: 13.01.2012
Сообщений: 1,637
20.01.2012, 13:56     класс "очередь параметров" #6
решил прочитать задание (осилил-таки)
Цитата Сообщение от pavlovnik Посмотреть сообщение
Параметром очереди могут быть данные сложного типа, например, первое поле число, второе поле строка символов фиксированной длины.
может тут под параметром подразумевается что-то наподобие поле1 [= поле2], а не просто какое-то_поле?
pavlovnik
41 / 22 / 4
Регистрация: 07.12.2011
Сообщений: 114
20.01.2012, 19:19  [ТС]     класс "очередь параметров" #7
Цитата Сообщение от retmas Посмотреть сообщение
решил прочитать задание (осилил-таки)
может тут под параметром подразумевается что-то наподобие поле1 [= поле2], а не просто какое-то_поле?
тут тоже не очень замечаний понимаю, препод смотрел увидел
структура с двумя отделами, тоесть в структуре есть какое-то число,и второй что-то еще....
ну видимо типа:
1--------------23--------------16
мир-----------звезда---------бред

вот эти параметры очереди.
тут сама реализация,маин этот чертов, где все проверяется, да и чтобы работало хочется....потому что так вроде сделал,а что не так уже сам не вижу.
retmas
Жарю без масла
831 / 713 / 156
Регистрация: 13.01.2012
Сообщений: 1,637
20.01.2012, 20:03     класс "очередь параметров" #8
кароч не знаю что вам надо, но тут
C++
1
2
3
4
5
6
7
8
istream & operator>>(istream&is,elem& e)
{
        cout<<"Введите номер: ";
        is>>e.num;
        cout<<"Введите поле инфо: ";
        is>>e.str;
        return is;
}
нигде не выделено памяти чтоб читать в e.str

Добавлено через 10 минут
пардон, не заметил, выделяется

Добавлено через 1 минуту
лучше скажите, что она должна делать, но не делает

Добавлено через 12 минут
C++
1
2
3
4
5
6
7
8
9
10
11
elem & elem::operator=(elem &e)
{
        if(this==&e)
                return *this;
        delete[] str;
        num=e.num;
        str=new char[num];
        for(int i=0;i<num;i++)
                str[i]=e.str[i];
        return *this;
}
здесь точно для str нужно выделить память для num элементов? т.е. число, которое вы вводите, будет длиной(почти) вводимой строки? вы этого хотели? или все же нет?
pavlovnik
41 / 22 / 4
Регистрация: 07.12.2011
Сообщений: 114
20.01.2012, 22:43  [ТС]     класс "очередь параметров" #9
}[/CPP]здесь точно для str нужно выделить память для num элементов? т.е. число, которое вы вводите, будет длиной(почти) вводимой строки? вы этого хотели? или все же нет?[/QUOTE]



ой,согласен, бред....блин тогда ограничть длину строки 80 символами чтоль желательно?
это для класса задается количество элементов,а структуры же правда поле отдельно для числа отдельно для чего-то еще, спасибо за замечание)

ну а что надо,это видимо если это должно как то работать,то помогите пожалуйста с программой, в main -е, которая все функции проверяет,тоесть создаем то, проверяем отдельно ввод структуру, отдельно создаем класс, туда вводим дли и эти параметры(проверяем << для обоих) вывод проверяем тоже отдельно для этого и того, проверку += и копирование параметра () в перемнную,видимо опять потом вывод его)
можно даже в маине задать все сразу,тоесть не вводить пользователю,а сразу забить эти поля значениями, чтобы при включение программы, она там выводила все красиво, просто нужен скрин преподу,что она красиво работает,все её функции....) вот чего хотелось)

Добавлено через 1 час 24 минуты
вот из другой проги взял,чтобы выглядел маин вот так хочу(

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
int main(){
    setlocale(LC_ALL, "Russian");
    triangle *t=new triangle;//создадим один треугольник
    rectangle *r=new rectangle;//и один четырехугольник
    List newlist;//создадим список 
    newlist.add(t);//добавим в него треугольник
    newlist.add(r);//добавим в него четырехугольник
    t=new triangle;//создадим еще один треугольник
    r=new rectangle;//и еще один четырехугольник
        newlist.add(t);//добавим в него треугольник
    newlist.add(r);//добавим в него четырехугольник
    cout<<"выведем список на экран\n";
    newlist.show();//и выведем список на экран
    cout<<"конец вывода\n";
    triangle tt;
    tt.show();
    tt=*t;
    tt.show();
    rectangle rr(*r);
    rr.show();
    list_element * temp=new list_element; //и удалим с помощью итератора  все треугольники
    cout<<"Удалим с помощью итератора  все треугольники"<<endl;
    for(iter i = newlist; temp = i.Get() ; i++)
        if(temp->listpoly->getkol()==3)newlist.del_elem(temp);
    cout<<"выведем список на экран\n";
    newlist.show();//и выведем список на экран
    cout<<"конец вывода\n";
    return 0;}
retmas
Жарю без масла
831 / 713 / 156
Регистрация: 13.01.2012
Сообщений: 1,637
21.01.2012, 00:04     класс "очередь параметров" #10
давайте сначала разберемся с этой структурой - "параметр". внятного ответа для себя я еще не увидел, что же это. но есть догадка: этот "параметр" - некий набор элементов, число которых задается. пусть эти элементы - строки, тогда ваша структура - что-то вроде этого:
C++
1
2
3
4
5
struct parameter
{
    int num;
    string* args;
};
оно или нет?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.01.2012, 01:33     класс "очередь параметров"
Еще ссылки по теме:

C++ "Очередь" на основе динамического массива
Шаблоны. Класс "Очередь" C++
C++ Добавить целое число в очередь с помощью "operator <<"
C++ Простейший класс "Очередь"
Реализовать класс "Очередь" C++

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

Или воспользуйтесь поиском по форуму:
pavlovnik
41 / 22 / 4
Регистрация: 07.12.2011
Сообщений: 114
21.01.2012, 01:33  [ТС]     класс "очередь параметров" #11
Цитата Сообщение от retmas Посмотреть сообщение
давайте сначала разберемся с этой структурой - "параметр". внятного ответа для себя я еще не увидел, что же это. но есть догадка: этот "параметр" - некий набор элементов, число которых задается. пусть эти элементы - строки, тогда ваша структура - что-то вроде этого:
C++
1
2
3
4
5
struct parameter
{
    int num;
    string* args;
};
оно или нет?
ну чем вам тип char не угодил не знаю, чило параметром не задается, щас чуть исправленный вариант(в основной мне про это сказали)

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
#include <iostream>
#include "classs.h"
using namespace std;
 
//предположили, что второй парметр параметра, строка длинной не больше 80 символов.
elem::elem()
{
    num=0;
    str=new char[80];
}
 
elem::elem(elem &e)
{
    num=e.num;
    str=new char[80];
    for(int i=0; i<80; i++)
        str[i]=e.str[i];
}
 
elem & elem::operator=(elem &e)
{
    if(this==&e)
        return *this;
    delete[] str;
    num=e.num;
    str=new char[80];
    for(int i=0;i<80;i++)
        str[i]=e.str[i];
    return *this;
}
 
 
istream & operator>>(istream&is,elem& e)
{
    cout<<"Введите номер: ";
    is>>e.num;
    cout<<"Введите поле инфо: ";
    is>>e.str;
    return is;
}
 
ostream & operator<<(ostream&os,elem& e)
{
    os<<e.num<<' '<<e.str<<endl;
    return os;
}
 
 
//класс
 
queue::queue()
{
    len=0;
    mas=0;
}
 
queue::queue(int n)
{
    len=n;
    mas=new elem[len];
}
 
queue::queue(int n, elem * m)
{
    len=n;
    mas=new elem[len];
    for(int i=0;i<len; i++)
        mas[i]=m[i];
 
}
 
queue::queue(queue &q)
{
    len=q.len;
    mas= new elem[len];
    for(int i=0; i<len; i++)
        mas[i]=q.mas[i];
}
 
queue & queue::operator=(queue &q)
{
    if(this==&q)
        return *this;
    delete []mas;
    len=q.len;
    mas=new elem[len];
    for(int i=0; i<len; i++)
        mas[i]=q.mas[i];
    return *this;
}
queue::~queue()
{
    delete[] mas;
}
 
 
istream & operator>>(istream&is,queue& q)
{
    for(int i=0;i<q.len;i++)
        is>>q.mas[i];
    return is;
 
}
 
ostream & operator<<(ostream&os,queue& q)
{
    for ( int i=0; i<q.len;i++)
        os<<q.mas[i];
return os;
};
 
queue & queue::operator+=(elem e)
{
    queue q(len+1,mas);
    mas[len]=e;
    delete[]mas;
    len=q.len;
    mas=new elem[len];
    for(int i=0;i<len; i++)
        mas[i]=q.mas[i];
    return *this;
};
 
 
void queue::operator()(int pos, elem e)
{queue q(len-1);
    for(int i=0;i<pos;i++)
        q.mas[i]=mas[i];
    e=mas[pos];
    for(int i=0;i<len;i++)
        q.mas[i]=mas[i];
    delete[] mas;
    len=q.len;
    mas=new elem[len];
    for(int i=0; i<len; i++)
        mas[i]=q.mas[i];
}
 
void queue::ochered(queue & q)
{
    int n=5;
    if(q.len==0)
      cout<<"Очередь пуста"<<endl;
    else if(q.len==n)
        cout<<"Очередь заполнена"<<endl;
    else 
        cout<<"Есть место"<<endl;
 
}
Добавлено через 2 минуты
как я представляю параметр
парамерт1:
12//любое число
привет//набор символов

параметр 2:
13//число
д@мочка//набор символов
Yandex
Объявления
21.01.2012, 01:33     класс "очередь параметров"
Ответ Создать тему
Опции темы

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