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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.90
pavlovnik
41 / 22 / 4
Регистрация: 07.12.2011
Сообщений: 114
#1

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

20.01.2012, 00:17. Просмотров 1265. Ответов 10
Метки нет (Все метки)

вот такое задание дали...но запоминаем что сразу делаем с динамической памятью.
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");
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.01.2012, 00:17
Здравствуйте! Я подобрал для вас темы с ответами на вопрос класс "очередь параметров" (C++):

Иерархия классов "список"-"очередь", вызов метода через класс интерфейс - C++
Есть небольшая иерархия классов, контейнер (список) для хранения объектов каждого класса, контейнер (очередь) с указателями на объект...

Создать абстрактный класс "Издание" и производные классы "Книга", "Статья", "Электронный ресурс" - C++
1. Создать абстрактный класс Издание с методами, позволяющими вывести на экран информацию об издании, а также определить является ли данное...

Создать класс "Вентилятор" содержащий в себе классы: "Двигатель", "Контроллер", "Пульт управления" - C++
Помогите с кодом написания задачи, не понимаю как написать классы в классе. Нужно создать класс &quot;вентилятор&quot; содержащий в себе классы:...

Создать класс "Книга" с полями "название книги", "количество страниц", "год издания" - C++
Создать класс Книга поля: название книги,количество страниц,год издания методы: вычислить сколько лет книге и количество дней прошедших...

класс Lqueue, структура типа "очередь" - C++
Создать класс Lqueue - структура типа &quot;очередь&quot;, что базируется на структуре связного списка. Тип значения, хранящиеся в очереди, выбрать...

Добавить функцию удаления в класс "Очередь" - C++
Подскажите как реализовать функцию удаления(popQueue)? //queue.h #include &lt;iostream&gt; #include &lt;iomanip&gt; using namespace std; ...

10
NoMasters
Псевдослучайный
1764 / 1107 / 73
Регистрация: 13.09.2011
Сообщений: 3,143
20.01.2012, 00:35 #2
Кхм... Зачем elem структура, если ты хочешь, чтобы у него были методы?
0
pavlovnik
41 / 22 / 4
Регистрация: 07.12.2011
Сообщений: 114
20.01.2012, 11:47  [ТС] #3
Цитата Сообщение от NoMasters Посмотреть сообщение
Кхм... Зачем elem структура, если ты хочешь, чтобы у него были методы?
задание,целесообразно использовать структуру...по заданию сделал,поле 1 - число,второе - хрень...ну и по заданию инициализация отдельно структуры,отдельно класса

Добавлено через 11 часов 7 минут
опять же вроде на словах красиво выглядит, но не работает...и нету программы проверяющей все дела
0
retmas
Жарю без масла
864 / 746 / 168
Регистрация: 13.01.2012
Сообщений: 1,702
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== писать надо
0
pavlovnik
41 / 22 / 4
Регистрация: 07.12.2011
Сообщений: 114
20.01.2012, 13:22  [ТС] #5
Цитата Сообщение от retmas Посмотреть сообщение
в условиях if q.len== писать надо
о,согласен,учел)
0
retmas
Жарю без масла
864 / 746 / 168
Регистрация: 13.01.2012
Сообщений: 1,702
20.01.2012, 13:56 #6
решил прочитать задание (осилил-таки)
Цитата Сообщение от pavlovnik Посмотреть сообщение
Параметром очереди могут быть данные сложного типа, например, первое поле число, второе поле строка символов фиксированной длины.
может тут под параметром подразумевается что-то наподобие поле1 [= поле2], а не просто какое-то_поле?
1
pavlovnik
41 / 22 / 4
Регистрация: 07.12.2011
Сообщений: 114
20.01.2012, 19:19  [ТС] #7
Цитата Сообщение от retmas Посмотреть сообщение
решил прочитать задание (осилил-таки)
может тут под параметром подразумевается что-то наподобие поле1 [= поле2], а не просто какое-то_поле?
тут тоже не очень замечаний понимаю, препод смотрел увидел
структура с двумя отделами, тоесть в структуре есть какое-то число,и второй что-то еще....
ну видимо типа:
1--------------23--------------16
мир-----------звезда---------бред

вот эти параметры очереди.
тут сама реализация,маин этот чертов, где все проверяется, да и чтобы работало хочется....потому что так вроде сделал,а что не так уже сам не вижу.
0
retmas
Жарю без масла
864 / 746 / 168
Регистрация: 13.01.2012
Сообщений: 1,702
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 элементов? т.е. число, которое вы вводите, будет длиной(почти) вводимой строки? вы этого хотели? или все же нет?
0
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;}
0
retmas
Жарю без масла
864 / 746 / 168
Регистрация: 13.01.2012
Сообщений: 1,702
21.01.2012, 00:04 #10
давайте сначала разберемся с этой структурой - "параметр". внятного ответа для себя я еще не увидел, что же это. но есть догадка: этот "параметр" - некий набор элементов, число которых задается. пусть эти элементы - строки, тогда ваша структура - что-то вроде этого:
C++
1
2
3
4
5
struct parameter
{
    int num;
    string* args;
};
оно или нет?
0
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//число
д@мочка//набор символов
0
21.01.2012, 01:33
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.01.2012, 01:33
Привет! Вот еще темы с ответами:

Описать класс "двухсторонняя очередь" - C++
Элементы в очереди - одномерные динамические массивы. Если честно, совершенно не понимаю, как это написать, поэтому остановилась на таком...

Реализовать класс родительский класс "Пара чисел" и класс-наследник "Комплексное число" - C++
Ткма работы создать класс pair (пара чисел); определить метод перемножения полей и операцию сложения пар (a,b)+(c,d) =(a+b,c+d)...

Реализовать класс "Очередь" - C++
Помогите разобраться при создании очереди чисел все просто и понятно, к примеру есть поле value туда я помещаю числа и оттуда могу их ...

Простейший класс "Очередь" - C++
Добрый вечер уважаемые друзья... Вот дошел до классов . И первую задачу я не очень понял . Помогите разжевать . Одному очень сложно. Буду...


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

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

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