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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 17, средняя оценка - 4.82
Selector_Al
0 / 0 / 0
Регистрация: 25.05.2011
Сообщений: 12
#1

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

27.05.2011, 00:03. Просмотров 2272. Ответов 0
Метки нет (Все метки)

Задание:
Создать шаблон класса "множество", позволяющий выполнять основные операции - добавление и удаление элемента, пересечение, объединение и разность множеств.

Вот что я набросал... класс создал.. осуществил ввод/вывод... затем делал добавление элемента.. и тут наткнулся на проблему, ну и соответственно, дальше не пошло ничего. Помогите пожалуйста! Укажите на ошибки!


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++
Всем доброго время суток! У меня возникла следующая проблема. Препод дал задание: написать шаблон для класса &quot;Рабочий&quot; с полями имени,...

Шаблон класса "Бинарное дерево" с насследованием - C++
Здравствуйте! Есть задание сделать шаблон класса &quot;Бинарное дерево&quot;. #include &lt;iostream&gt; #include &lt;conio.h&gt; using namespace std;...

Шаблон класса "Стек" на основе массива - C++
Напишите шаблон класса &quot;Стек&quot;на основе массива.Предусмотрите функции добавление и извлечения элемента,удаление всего стека.Напишите класс...

Исправить ошибку компиляции "для использования класса шаблон требуется список аргументов шаблона" - C++
Решил создать класс List для задания двусвязного списка, и в самом начале компилятор начал ругаться на шаблон класса: error C2955:...

Разработать шаблон класса "Очередь" - C++
Люди, помогите пожалуйста, последняя лаба осталась, ни как не могу решить! Тема: Шаблоны Классов. необходимо разработать шаблон класса...

Шаблон класса "Однонаправленный список" - C++
Доброго времени суток. Возник вопрос по шаблонам. С самими шаблонами я вроде бы разорался, и вот хотелось бы сделать такую вещь. Чтобы я...

Шаблон класса "Животное" (Мультимножество) - C++
Имею первый опыт работы с шаблонами класса. Подскажите, что делаю не так. Задание: Вариант 15 - Мультимножество(Структура данных) -...

Шаблон класса "очередь с приоритетами" - C++
Здравствуйте, небходимо создать шаблон класса &quot;очередь с приоритетами&quot;. При добавлении элемента в такую очередь его номер определяется его...

Описать шаблон класса АТД: "Участник очереди на печать издания: фамилия, телефон, количество страниц" - C++
Шаблоны классов с++. Нужно доделать задачу. 1. Описать шаблон класса АТД: &quot;Участник очереди на печать издания: фамилия, телефон,...

Создание класса "Множество" - C++
Помогите,а то с классами никак не могу разобраться( Описать класс &quot;множество&quot;,в котором будет описано пересечение...


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

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

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