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

Перегрузка функций - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Задача на текстовые файлы и их использование http://www.cyberforum.ru/cpp-beginners/thread1185619.html
С помощью текстового редактора создать файл, содержащий текст, длина которого не превышает 1000 символов (длина строки текста не должна превышать 70 символов). Имя файла должно иметь расширение DAT. Написать программу, которая : - выводить текст на экран дисплея; - определяет количество символов в самом длинном слове; - по нажатию произвольной клавиши поочередно выделять каждое слово текста,...
C++ Описать структуру с именем "Train" и программу, работающую с массивом таких структур 1. Описать структуру с именем TRAIN, содержащую поля: - NAZN - название пункта назначения; -NUMR - номер поезда; -TIME - время отправления. 2. Написать программу, выполняющую следующие действия - ввод с клавиатуры данных в массив RAST, состоящий из шести элементов типа TRAIN: записи должны быть упорядочены по времени отправителя поезда; - вывод на экран информации о поездах, направляющихся... http://www.cyberforum.ru/cpp-beginners/thread1185618.html
C++ Ошибка в коде. Из числового множества A мощности n выбрать все подмножества
С числовой множества A мощности n выбрать все подмножества, сумма элементов каждого из которых лежит в пределах от a до b / С++ для начинающих , ВОТ КОД #include <iostream> using namespace std; int a,n,a,b; int sum(int x,int y) {int s=0; for(int i=x;i<=y;i++) s+=a; return s;
класс наследник на основе базового класса C++
-----
C++ Цикл for: зачем использовать разделитель " ; " два раза? http://www.cyberforum.ru/cpp-beginners/thread1185588.html
Cмотрите, какой вопрос. for (i = 0; ;i++) Не понимаю, зачем использовать разделитель " ; " два раза. Какую синтаксическую функцию несет? Спасибо за терпение. :)
C++ Поменять связи двусвязного списка Как в главном цикле поменять связи двусвязного списка в обратном порядке(не значений, а именно связей)? struct node // Описание узла { int info; // Информационное поле node *rlink, *llink; // Поля для связи с другими полями }; /*_______Функция вывода списка спpава налево_____*/ void rlist(const node *right) { подробнее

Показать сообщение отдельно
Fnatick
0 / 0 / 0
Регистрация: 15.09.2013
Сообщений: 25
23.05.2014, 09:28     Перегрузка функций
АТД - множество с элементами типа int. Дополнительно перегрузить следующие
операции:
«+» - добавить элемент в множество(типа int + set);
«–» - вычитание множеств (дружественная функция)
«==» - проверка множеств на равенство(дружественная функция).
Если меняю + на -, компилиться но сразу же ошибку
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
#include <iostream>
using namespace std;
 
class SetInt{
private:
    int *arr;
    int maxSize;
    int size;
public:
    SetInt(){
        maxSize = 0;
        size = 0;
        arr = NULL;
    }
    SetInt(int maxSize){
        this->maxSize = maxSize;
        size = 0;
        arr = new int[maxSize];
    }
    SetInt(const SetInt &setint){
        maxSize = setint.maxSize;
        arr = new int[maxSize];
        size = setint.size;
        for(int i = 0; i < size; i++)
            arr[i] = setint.arr[i];
    }
    ~SetInt(){
        delete [] arr;
    }
    
    bool in(int item){
        for(int i = 0; i < size; i++)
            if(arr[i]==item) return true;
        return false;
    }
    
    SetInt &operator += (int item){
        if(in(item)==false && size < maxSize){
            arr[size] = item;
            size++;
        }
        return *this;
    }
 
    SetInt &operator = (SetInt &setint){
        if(this == &setint) return *this;
        if(arr != NULL) delete [] arr;
        maxSize = setint.maxSize;
        arr = new int[maxSize];
        size = setint.size;
        for(int i = 0; i < size; i++)
            arr[i] = setint.arr[i];
        return *this;
    }
 
    bool operator == (SetInt &setint){
        if(size != setint.size) return false;
        // предварительно отсортировать arr и setchar.arr
        for(int i = 0; i < size; i++)
            if(arr[i]!=setint.arr[i]) return false;
        return true;
    }
 
    void input(int size){
        if(size > maxSize) return ;
        this->size = size;
        int i = 0;
        while(i < size){
            int 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 SetInt operator + (SetInt &s1, SetInt &s2);
    friend SetInt operator * (SetInt &s1, SetInt &s2);
};
 
SetInt operator + (SetInt &s1, SetInt &s2){
    int maxTotalSize = s1.maxSize + s2.maxSize;
    SetInt 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;
}
 
SetInt operator * (SetInt &s1, SetInt &s2){
    int mSize;
    if(s1.maxSize > s2.maxSize) mSize = s1.maxSize; else mSize = s2.maxSize;
    SetInt 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);
    SetInt st(10);
    st.input(5);
    st.print();
 
    SetInt st2(10);
    st2.input(5);
    st2.print();
    
    if(st == st2) cout << "set equal" << endl;
    else cout << "set no equal" << endl;
 
    SetInt st1 = st2;
    if(st1 == st2) cout << "set equal" << endl;
    else cout << "set no equal" << endl;
 
    SetInt st3;
    st3 = st + st2;
    st3.print();
 
    
  
    st3 += 't';
 
 
    st3.print();
 
    SetInt st4;
    st4 = st*st2;
    cout <<"--------"<< endl;
    st4.print();
        int();
    system("pause");
    return 0;
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 03:36. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru