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

Согласно заданию реализовать класс абстрактного типа данных (далее АТД) как динамический массив. Для этого определение класса должно иметь следующие - C++

Восстановить пароль Регистрация
 
xkorp
 Аватар для xkorp
0 / 0 / 1
Регистрация: 31.01.2014
Сообщений: 12
25.02.2014, 13:05     Согласно заданию реализовать класс абстрактного типа данных (далее АТД) как динамический массив. Для этого определение класса должно иметь следующие #1
1. Согласно заданию реализовать класс абстрактного типа данных (далее АТД) как
динамический массив. Для этого определение класса должно иметь следующие поля:
• указатель на начало массива;
• максимальный размер массива;
• текущий размер массива.
2. Определить и реализовать в классе конструкторы (и конструктор копирования), деструктор, функции Input() (ввод склавиатуры) и Print() (вывод на экран), перегрузить операцию присваивания.
3. Написать программу тестирования класса и выполнить тестирование.
4. Дополнить определение класса заданными перегруженными операциями ( в соответствии с
вариантом).
5. Реализовать эти операции. Выполнить тестирование.
АТД - множество с элементами типа char. Дополнительно перегрузить следующие
операции:
«-» - удалить элемент из множества (типа set-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
#include <iostream>
using namespace std;
 
class SetChar{
private:
    char *arr;
    int maxSize;
    int size;
public:
    SetChar(){
        maxSize = 0;
        size = 0;
        arr = NULL;
    }
    SetChar(int maxSize){
        this->maxSize = maxSize;
        size = 0;
        arr = new char[maxSize];
    }
    SetChar(const SetChar &setchar){
        maxSize = setchar.maxSize;
        arr = new char[maxSize];
        size = setchar.size;
        for(int i = 0; i < size; i++)
            arr[i] = setchar.arr[i];
    }
    ~SetChar(){
        delete [] arr;
    }
    
    bool in(char item){
        for(int i = 0; i < size; i++)
            if(arr[i]==item) return true;
        return false;
    }
    
    SetChar &operator += (char item){
        if(in(item)==false && size < maxSize){
            arr[size] = item;
            size++;
        }
        return *this;
    }
 
    SetChar &operator = (SetChar &setchar){
        if(this == &setchar) return *this;
        if(arr != NULL) delete [] arr;
        maxSize = setchar.maxSize;
        arr = new char[maxSize];
        size = setchar.size;
        for(int i = 0; i < size; i++)
            arr[i] = setchar.arr[i];
        return *this;
    }
 
    bool operator == (SetChar &setchar){
        if(size != setchar.size) return false;
        // предварительно отсортировать arr и setchar.arr
        for(int i = 0; i < size; i++)
            if(arr[i]!=setchar.arr[i]) return false;
        return true;
    }
 
    void input(int size){
        if(size > maxSize) return ;
        this->size = size;
        int i = 0;
        while(i < size){
            char item = (33 + rand()%100);
        //  cin >> item;
            if(!in(item)) {
                arr[i] = item;
                i++;
            }
        }   
    }
    
    void print(){
        for(int i = 0; i < size; i++)
            cout << arr[i] << " ";
        cout << endl;
    }
    friend SetChar operator + (SetChar &s1, SetChar &s2);
    friend SetChar operator * (SetChar &s1, SetChar &s2);
};
 
SetChar operator + (SetChar &s1, SetChar &s2){
    int maxTotalSize = s1.maxSize + s2.maxSize;
    SetChar result(maxTotalSize);   
    for(int i = 0; i < s1.size; i++){
        result.arr[i] = s1.arr[i];
    }
    result.size = s1.size;
    for(int i = 0; i < s2.size; i++){
        result += s2.arr[i];
    }
    return result;
}
 
SetChar operator * (SetChar &s1, SetChar &s2){
    int mSize;
    if(s1.maxSize > s2.maxSize) mSize = s1.maxSize; else mSize = s2.maxSize;
    SetChar result(mSize);
    for(int i = 0; i < s1.size; i++){
        for(int j = 0 ; j < s2.size; j++)
            if(s1.arr[i] == s2.arr[j])
                result += s1.arr[i];
    }
    return result;
}
 
int main(){
    srand(5);
    SetChar st(10);
    st.input(5);
    st.print();
 
    SetChar st2(10);
    st2.input(5);
    st2.print();
    
    if(st == st2) cout << "set equal" << endl;
    else cout << "set no equal" << endl;
 
    SetChar st1 = st2;
    if(st1 == st2) cout << "set equal" << endl;
    else cout << "set no equal" << endl;
 
    SetChar st3;
    st3 = st + st2;
    st3.print();
 
    
  
    st3 += 't';
 
 
    st3.print();
 
    SetChar st4;
    st4 = st*st2;
    cout <<"--------"<< endl;
    st4.print();
    system("pause");
    return 0;
}
Желательно с комментариями) Я просто не понимаю эту тему, хочется вникнуть на примере решённой задачи
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.02.2014, 13:05     Согласно заданию реализовать класс абстрактного типа данных (далее АТД) как динамический массив. Для этого определение класса должно иметь следующие
Посмотрите здесь:

C++ [C++] Реализуйте АТД “Список” для любого типа данных
Выражение должно иметь тип класса. Да ну? C++
Как правильно записывать в динамический массив типа класса обьекты? вот банальный пример C++
C++ Создайте АТД class, в области данных которого содержится динамический массив
C++ Как реализовать класс Pricelist, который будет содержать динамический массив объектов Model
Работа с текстами/строки. Error: выражение должно иметь тип класса C++
C++ Выражение должно иметь тип класса в Visual Studio
Как создать динамический массив типа string? Как создать класс такого массива? C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Рыжий Лис
Просто Лис
 Аватар для Рыжий Лис
209 / 164 / 44
Регистрация: 17.05.2012
Сообщений: 611
Записей в блоге: 4
01.03.2014, 22:16     Согласно заданию реализовать класс абстрактного типа данных (далее АТД) как динамический массив. Для этого определение класса должно иметь следующие #2
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
#include <iostream>
using namespace std;
 
class SetChar{// класс
private://приватные, закрытые поля класса
    char *arr; //указатель на начало массива;
    int maxSize; //максимальный размер массива;
    int size; //текущий размер массива.
public://открытые поля и методы класса
    SetChar(){ //конструктор по умолчанию
        maxSize = 0; //присваивание значений полям класса
        size = 0;
        arr = NULL;
    }
    SetChar(int maxSize){//другой конструктор с параметрами
        this->maxSize = maxSize;
        size = 0;
        arr = new char[maxSize];//создание массива максимальной длины
    }
    SetChar(const SetChar &setchar){
        maxSize = setchar.maxSize;
        arr = new char[maxSize];
        size = setchar.size;
        for(int i = 0; i < size; i++)
            arr[i] = setchar.arr[i];
    }
    ~SetChar(){//деструктор
        delete [] arr;//освобождение памяти из под массива
    }
    
    bool in(char item){
        for(int i = 0; i < size; i++)
            if(arr[i]==item) return true;
        return false;
    }
    
    SetChar &operator += (char item){
        if(in(item)==false && size < maxSize){
            arr[size] = item;
            size++;
        }
        return *this;
    }
 
    SetChar &operator = (SetChar &setchar){
        if(this == &setchar) return *this;
        if(arr != NULL) delete [] arr;
        maxSize = setchar.maxSize;
        arr = new char[maxSize];
        size = setchar.size;
        for(int i = 0; i < size; i++)
            arr[i] = setchar.arr[i];
        return *this;
    }
 
    bool operator == (SetChar &setchar){
        if(size != setchar.size) return false;
        // предварительно отсортировать arr и setchar.arr
        for(int i = 0; i < size; i++)
            if(arr[i]!=setchar.arr[i]) return false;
        return true;
    }
 
    void input(int size){
        if(size > maxSize) return ;
        this->size = size;
        int i = 0;
        while(i < size){
            char item = (33 + rand()%100);
        //  cin >> item;
            if(!in(item)) {
                arr[i] = item;
                i++;
            }
        }   
    }
    
    void print(){
        for(int i = 0; i < size; i++)
            cout << arr[i] << " ";
        cout << endl;
    }
    friend SetChar operator + (SetChar &s1, SetChar &s2);
    friend SetChar operator * (SetChar &s1, SetChar &s2);
};
 
SetChar operator + (SetChar &s1, SetChar &s2){
    int maxTotalSize = s1.maxSize + s2.maxSize;
    SetChar result(maxTotalSize);   
    for(int i = 0; i < s1.size; i++){
        result.arr[i] = s1.arr[i];
    }
    result.size = s1.size;
    for(int i = 0; i < s2.size; i++){
        result += s2.arr[i];
    }
    return result;
}
 
SetChar operator * (SetChar &s1, SetChar &s2){
    int mSize;
    if(s1.maxSize > s2.maxSize) mSize = s1.maxSize; else mSize = s2.maxSize;
    SetChar result(mSize);
    for(int i = 0; i < s1.size; i++){
        for(int j = 0 ; j < s2.size; j++)
            if(s1.arr[i] == s2.arr[j])
                result += s1.arr[i];
    }
    return result;
}
 
int main(){
    srand(5);
    SetChar st(10);
    st.input(5);
    st.print();
 
    SetChar st2(10);
    st2.input(5);
    st2.print();
    
    if(st == st2) cout << "set equal" << endl;
    else cout << "set no equal" << endl;
 
    SetChar st1 = st2;
    if(st1 == st2) cout << "set equal" << endl;
    else cout << "set no equal" << endl;
 
    SetChar st3;
    st3 = st + st2;
    st3.print();
 
    
  
    st3 += 't';
 
 
    st3.print();
 
    SetChar st4;
    st4 = st*st2;
    cout <<"--------"<< endl;
    st4.print();
    system("pause");
    return 0;
}
Yandex
Объявления
01.03.2014, 22:16     Согласно заданию реализовать класс абстрактного типа данных (далее АТД) как динамический массив. Для этого определение класса должно иметь следующие
Ответ Создать тему
Опции темы

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