0 / 0 / 0
Регистрация: 16.12.2016
Сообщений: 6
1

Ошибка в перегрузке оператора =

22.12.2016, 20:12. Показов 564. Ответов 2
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
В классе множество нужно перегрузить оператор = так, чтобы была возможность присвоить f(x)=const. Подскажите, где ошибка в этом коде.
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
#pragma once
#include <iostream>
const int Max=100;
using namespace std;
class Set;
class SubSet {
    int l,r;
    Set *V;
public:
    SubSet(int l,int r,Set *V) {
        this->l=l;
        this->r=r;
        this->V=V;
    }
    void operator = (int k);
    void operator = (Set Y);
};
 
class Set {
public:
        int amount;                        
        char members[MaxSize];          
        
        
        Set() { amount = 0; }
        Set(const Set &s1);
        Set(int m){
        amount=m;
        for (int i=0; i<amount; i++)
            members[i]=' ';
    }
        int amount_of_elements() { return amount; }
        
        void showset();                
        int belongs(char el);   
        bool isMember(char el);       
                                      
        Set operator+(char el);         
        Set operator-(char el);         
        
        Set operator+(Set mn);         
        Set operator-(Set mn); 
    char &operator [] (int i) {
    return members[i];
    }
    
SubSet operator() (int l,int r) {
        SubSet W(l,r,this);
        return W;
    }   
friend istream &operator >>(istream &stream,  Set &s1);
friend ostream &operator <<(ostream &stream, const Set &s1);
 
    friend SubSet;
};
 
void SubSet::operator = (int k) {
    for (int i=l; i<=r; i++)
        (*V).members[i]=k;
}
 
void SubSet::operator = (Set Y){
    int l_R=(*V).amount-(r-l+1)+Y.amount;
    Set R(l_R);
    for (int i=0; i<l; i++)
        R.members[i]=(*V).members[i];
    int t=l;
    for (int i=0; i<Y.amount; i++)
        R.members[t++]=Y.members[i];
    for (int i=r+1; i<(*V).amount; i++)
        R.members[t++]=(*V).members[i];
    (*V).amount=l_R;
    (*V)=R;
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
22.12.2016, 20:12
Ответы с готовыми решениями:

Ошибка в перегрузке оператора +=
В строках 42-50 пытаюсь описать перегрузку операции +=, но выдаёт ошибку слишком много операторов...

Ошибка в перегрузке оператора +=
#include &lt;iostream.h&gt; #include &lt;string.h&gt; #include &lt;windows.h&gt; const int da=256; class stroki ...

Ошибка в перегрузке оператора
Не пойму в чем дело(( Имеется класс вектор ,вычислил длину,а теперь очу сравнить их величины,но не...

Ошибка при перегрузке оператора >>
Приветствую. Есть 2 класса: enum Color { white = 1, red, green, blue, yellow }; class Shape {...

2
11 / 1 / 1
Регистрация: 02.10.2015
Сообщений: 98
23.12.2016, 14:10 2
C++
1
2
 void operator = (int k);
    void operator = (Set Y);
Это перегрузка? я думал, что оператор присваивания должен возвращать ссылку, а у вас void?
Это корректно?

C++
1
class Set;
Какая смысловая нагрузка этого?

C++
1
int amount_of_elements() { return amount; }
Традиционно данный метод( функция - член класса) называют геттером и пишут
C++
1
2
int getAmount(void ) const{
return amount; }
Const - означает константность метода, он не изменяет члены данные класса( поля ).

Еще важная ремарка.....класс set у вас полностью открытый. ( не имеет скрытых полей ), поэтому его существование теряет смысл или, если вы так планировали, то поделитесь почему так?

Честно..... как - то ужасно все. Вопрос, он у вас компилируется и работает ? По - моему тут другие вопросы нужно решать. А еще лучше вернуться к обучению. Ошибок много. идея не ясна. и вопрос не понятен.
0
Форумчанин
Эксперт CЭксперт С++
8216 / 5046 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
23.12.2016, 14:20 3
Цитата Сообщение от Sonia_R Посмотреть сообщение
присвоить f(x)=const
Что значит f(x), что значит const?
Согласен с предыдущим постом - код ужасно спроектирован и оформлен, предназначения классов не понятны. И реализация класса зачем-то запихнута в хедер (иначе зачем pragma once).
0
23.12.2016, 14:20
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
23.12.2016, 14:20
Помогаю со студенческими работами здесь

Ошибка в перегрузке оператора пересечения
Пожалуйста, помогите найти ошибку! При перегрузке оператора пересечения (*) в return tmp возникает...

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

Ошибка при перегрузке оператора cin >>
#include &lt;iostream&gt; using namespace std; ...

Ошибка в перегрузке оператора - при работе с массивами
Текст программы: #include &lt;iostream&gt; #include &lt;windows.h&gt; using namespace std; class array ...

Ошибка при перегрузке оператора вывода в файл
Добрый день, есть такой кусок кода: #include &lt;iostream&gt; #include &lt;ostream&gt; using...

Ошибка в деструкторе или перегрузке оператора C++ ООП
#include &lt;iostream&gt; #include &lt;iomanip&gt; #include &lt;conio.h&gt; #include &lt;math.h&gt; #include...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru