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

Шаблон класса "множество" - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 17, средняя оценка - 4.82
Selector_Al
0 / 0 / 0
Регистрация: 25.05.2011
Сообщений: 12
27.05.2011, 00:03     Шаблон класса "множество" #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
#include "StdAfx.h"
#include "iostream"
using namespace std;
 
template<class type>
class set
{
    private:
        type *mass; //указатель, хранящий адрес размещения массива(содержащего множество) в динамической памяти
        unsigned size; //размер массива
        int find(type); //ф-ия закрыта, тк она не используется вне шаблона класса
    public:
        //-----Конструкторы:
        set(){size=0;};
        set(int); //создает объект
        set(const set&); //конструктор копирования (создает новый объект с параметрами старого)
        //=================
 
        //-----Деструктор:
        ~set(){
            if(mass)
                delete [] mass;} //деструктор
        //=================
 
        //-----Операции:
        //void show_set();
        type& operator [] (int); //неконстантная версия - для записи
        const type& operator [] (int) const; //константная версия - для чтения
        set operator + (type); //добавление элемента
        //set operator - (type); //удаление элемента
        //const size_t Size() const {return size;}
        //==============
 
        int get_size() const {return size;} //метод, возвращающий размерность массива i-го объекта
};
 
template<class type> //возвращает индекс элемента, задаваемого параметром mas, или -1, если элемент не найден
int set<type>::find(type mas)
{
    int i;
    for(i=0;i<size;i++)
        if(mass[i]==mas)
            return i;
    return -1;
}
 
template<typename type2> //перегрузка оператора вывода в поток (вне класса)
std::ostream& operator << (std::ostream& os, const set<type2>& Ob)
{
    for(int i=0; i<Ob.get_size(); ++i)
    {
         os<<Ob[i]<<" ";
    }
    os<<'\n';
    return os;
}
 
template<class type>
set<type>::set(int n)
{
    size=n;
    if(n){
        mass=new type[size];
        for(int i=0; i<size; i++)
            cin>>mass[i];
    }
    else
        mass=0;
}
 
template<class type>
set<type>::set(const set& x)
{
    size=x.size;
    if(x.mass){
        mass=new type[size];
        for(int i=0;i<size;i++){
            mass[i]=x.mass[i];
        }
    }
    else
        mass = 0;
}
 
template<class type>
const type& set<type>::operator [] (int i) const{
        if(i<0||i>size){
            cout<<"Error"<<endl;
            exit(1);
        }
        return mass[i];
}
 
template<class type>
type& set<type>::operator [] (int i){
        if(i<0||i>size){
            cout<<"Error"<<endl;
            exit(1);
        }
        return mass[i];
}
 
template<class type>
set<type> set<type>::operator + (type mas)
{
    set newset;
    newset=*this; //дублируем существующее множество
    if(find(mas)==-1){ //если не найден, можно добавить
        newset.mass[newset.get_size()]=mas;
        newset.size++;
    }
    return newset; //возвращаем обновленное множество
}
 
/*template<typename type2> //перегрузка оператора ввода с консоли (вне класса)
std::istream& operator >> (std::ostream& is, const set<type2>& Ob)
{
    for(int i=0; i<Ob.get_size; ++i)
    {
         is>>Ob[i];
    }
    return is;
}*/
 
/*template<class type>
void set<type>::show_set(){
    for(int i=0;i<size;i++){
        cout<<mass[i]<<" ";
    }
    cout<<endl;
}*/
 
 
 
 
int main()
{
    setlocale(LC_ALL, "RUS");
    cout<<"Введите размер (положительное целое число) 1-го множества: (целые числа) "; int n; cin>>n;
    cout<<"Заполните множество:"<<endl;
    set<int> a(n);
    cout<<endl; n=0;
    cout<<"Введите размер (положительное целое число) 2-го множества: (вещественные числа) "; int m; cin>>m;
    cout<<"Заполните множество:"<<endl;
    set<float> b(m);
    cout<<endl;
    cout<<"Ваши множества:"<<endl;
    //a.show_set();
    cout<<a<<endl;
    cout<<b<<endl;
    a=a+'2';
    cout<<a<<endl;
    system("PAUSE");
    return 0;
}
За ранее благодарен!
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.05.2011, 00:03     Шаблон класса "множество"
Посмотрите здесь:

Ошибка в программе, где создается шаблон класса "стек" C++
Класс: Реализация через битовое поле класса "Множество" C++
C++ Написать шаблон для класса "Рабочий"
C++ Шаблон класса "Однонаправленный список"
Перегрузка операторов для класса "множество целых чисел" C++
C++ Шаблон класса "Стек" на основе массива
Шаблон класса "Животное" (Мультимножество) C++
Шаблон класса "Бинарное дерево" с насследованием C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать тему
Опции темы

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