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

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

Войти
Регистрация
Восстановить пароль
 
Triathlet
0 / 0 / 0
Регистрация: 17.09.2012
Сообщений: 67
#1

Объясните, как работают перегрузки оператора? - C++

13.11.2012, 19:46. Просмотров 470. Ответов 0
Метки нет (Все метки)

Объясните, как работают перегрузки оператора = и функций Union ..а точнее указатель this.Заранее спасибо.

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
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
#include <iostream>
 
using namespace std;
 
class Set 
{ 
    friend istream& operator>>(istream & stream, Set & с);
    friend ostream& operator<<(ostream & stream, Set & с);
private: 
    int size; 
    int* array;
    int cnt;
public: 
    Set() { cnt=0;size = 0; array = new int[size]; } // конструктор
 
    Set(int s) {  size = s; array = new int[size]; // конструктор с аргументами
                  for (int i = 0; i < size; i++) 
                      array[i] = 0;  }
                 
    Set(const Set &ob) // конструктор копии
    {   size = ob.size;  
        array = new  int[size]; 
        for ( int i = 0; i < size; i++) 
              array[i] = ob.array[i]; } 
 
    ~Set() { delete [] array; }  // деструктор
    void Enter(); // ввод
    void Show(); // вывод
    void Union(Set, Set); // объединение
    void intersection(Set, Set); // пересечение
    void add(); // добавка элемента
    void extract(); // извлечение
    void check(); // проверка
    void operator = (Set); // перегрузки
    int operator [] (int i); 
    Set *Set :: operator -> ();
    {
        return this;
        cnt++;
    }
    
    };
ostream& operator << (ostream& stream,Set &c);
{
    c.show();
    return stream;
}
 
istream& operator >> (ostream& stream , Set &c);
{
    if (i!=0)
    {
        stream>>c.array[c.i];
    }
    return stream;
}
 
 
void Set::Enter() 
{ 
    cout << "Введите размер " << endl; 
    cin >> size;  
    array = new int[size];
    for (int i = 0; i < size; i++) 
    { 
        cout << "Введите элемент " << i + 1 << ")   "; 
        cin >> array[i]; 
    } 
} 
 
void Set::Show() 
{ 
    cout << "Множество " << endl; 
    for ( int i = 0; i < size; i++) 
        cout << array[i] << " "; 
    cout << endl;
}  
 
void Set::Union(Set a, Set b) 
{ 
    this->size = a.size + b.size;  
    this->array = new int[size];
    int i, j, count = 0; 
    int n = a.size; 
    
 
    for ( i = 0; i < a.size; i++) 
        array[i] = a.array[i]; 
 
    for ( i = 0; i < b.size; i++) 
    { 
        for ( j = 0; j < a.size; j++) 
            if(b.array[i] == a.array[j]) 
                continue; 
            else 
                count++; 
        if(count == a.size) 
            array[n++] = b.array[i];  
        count = 0;
    } 
    size = n;
} 
 
void Set::intersection(Set a, Set b) 
{  
    size = a.size + b.size; 
    array = new int[size]; 
    int i, j, n = 0; 
 
    for ( i = 0; i < a.size; i++) 
        for ( j = 0; j < b.size; j++) 
        { 
            if(a.array[i] == b.array[j]) 
            {
                array[n++] = a.array[i]; 
                continue;
            } 
        } 
        size = n;
} 
 
void Set::add() 
{ 
    int a[100];  
    int i;  
    int element;
    for ( i = 0; i < size; i++) 
        a[i] = array[i]; 
    delete [] array;
    size = size + 1;  
 
    cout << "Введите новый элемент " << endl; 
    cin >> element; 
    a[i] = element; 
 
    array = new int[size]; 
    for ( i = 0; i < size; i++) 
        array[i] = a[i]; 
} 
 
void Set::extract() 
{ 
    int number, n, i, j; 
    n = size;
    cout << "Введите номер элемента от 1 до " << size << endl; 
    cin >> number; 
 
    if( number < 0 || number > size) 
        cout << "Ошибка " << endl; 
    else 
    { 
        for ( i = 0; i < n; i++) 
        { 
            if( i == number) 
            { 
                for ( j = i; j < n - 1; j++) 
                    array[j] = array[j+1];  
                n--;
            } 
             
        } 
        size--; 
    }  
} 
 
void Set::check() 
{  
    int element; 
    cout << "Введите элемент для проверки " << endl; 
    cin >> element; 
    int i, count = 0;
    for ( i = 0; i < size; i++) 
        if( array[i] == element) 
            cout << "Да такой элемент найден " << endl; 
        else  
            count++; 
    if(count == size) 
        cout << "Элемент не найден " << endl;
}
 
 
void Set::operator = (Set a) 
{ 
    int i;
    delete[] this->array; 
 
    this->size = a.size; 
    this->array = new int[size]; 
    for ( i = 0; i < size; i++) 
        array[i] = a.array[i];
 
} 
 
int Set::operator[](int i) 
{ 
    return array[i];
} 
 
 
int main() 
{  
    setlocale(0, "rus");  
    Set a; 
    cout << "Ввод и вывод 1 множества " << endl;
    a.Enter(); 
    a.Show(); 
    Set b = a; 
    cout << "инициализация множества 2 с помощью конструктора копии "<< endl; 
    b.Show();  
    cout << "Ввод множества 2 " << endl;
    b.Enter(); 
    Set c;  
    cout << "Объединение множеств " << endl;
    c.Union(a, b);  
    c.Show();
    Set d; 
    d.intersection(a, b); 
    cout <<  "Пересечение множеств" << endl; 
    d.Show(); 
    cout << "Добавка элемента "<< endl;
    d.add(); 
    d.Show();
    cout << "Проверка " << endl; 
    d.check();  
    d.Show();
    cout << "Извлечение " << endl; 
    d.extract(); 
    d.Show();
    system("PAUSE");
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.11.2012, 19:46     Объясните, как работают перегрузки оператора?
Посмотрите здесь:

Ошибка перегрузки оператора - C++
Здравствуйте уважаемые программисты, при созданиии проэкта возникает ошибка In function 'int main()': 154 10 no 'operator++(int)'...

Целесообразность перегрузки оператора - C++
Изначально имелся такой вот метод (пусть будет методом класса &quot;A&quot;): //класс &quot;A&quot;, константная версия метода const Order &amp;operator...

Ошибка из книги оператора перегрузки - C++
// Листинг 10.10. // Возвращение безымянного временного объекта #include &lt;string&gt; #include &lt;iostream&gt; // для объекта cout using...

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

Friend-функции перегрузки оператора - C++
Всем доброго времени суток =) У меня есть следующий код заголовочного файла: enum month {jan = 1, feb, mar, apr, may, jun, jul, aug, sep,...

Вопрос по поводу перегрузки оператора + - C++
Всем привет.Подскажите как можно перегрузить оператор + в моем классе? И что лучше вернуть из перегруженной операции +=? Объект или...

Аналог перегрузки оператора индексирования (operator []) - C++
Как по-другому(то есть в виде обычной функции или как то ещё) можно записать перегрузку оператора индексирования? Например в моём случае:...

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

По поводу потока и перегрузки оператора вставки в классе - C++
#include &lt;iostream&gt; using namespace std; class three_d { public: int x, y, z; three_d(int a, int b, int c) { x=a; y=b; z=c; } ...

Выполнить объединение двух строк с помощью перегрузки оператора (*) - C++
#define _CRT_SECURE_NO_WARNINGS #include&lt;iostream&gt; #include&lt;string&gt; using namespace std; class String { char *str; int...

Объясните как работают битовые операции C++ - C++
В книге Айвора Хортона Visual C++ 2005 Базовый курс (ксати очень хорошая книга) была описана такая последовательность побитовой операции...

Объясните, как в данном примере работают виртуальные функции? - C++
Такое дело надо обьяснить особенность виртуальной функции, типо как будет работать программа без виртуальных функций #include &lt;iostream&gt; ...


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

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

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