Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
il_l
0 / 0 / 0
Регистрация: 10.12.2015
Сообщений: 2
1

В классе дек неправильно работает оператор +

10.12.2015, 09:56. Просмотров 173. Ответов 3
Метки нет (Все метки)

Я написал класс дек. И вскоре обнаружилась проблема того что оператор + работает не так как надо.
Было написано 3 оператора. Дек+Дек. Число+Дек. Дек+Число.
Все работает. Но когда вводишь число+дек+число, то выполняется только число+дек. Второе же число не добавляется. К примеру результатом работы:
C++
1
2
3
4
5
dack c(7);
dack d(6);
push_r(1);
push_r(2);
c=13+d+14;
будет не дек 13 1 2 14, а дек 13 1 2. Почему так происходит?

Код класса:


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
#include <iostream>
using namespace std;
 
class dack {
    private:
        int *msv;
        int n, l, r, m;
    public:
        dack(){n=15; msv=new int[n];l=(n-1)/2; r=(l+1)%n; m=0;}
        dack(int x) {n=x; msv=new int[n];l=(n-1)/2; r=(l+1)%n; m=0;}
        int push_l(int a);
        int push_r(int a); 
        int pop_l();
        int pop_r();
        void print_dack();
        ~dack(){delete msv; l=r=n=m=0;}
        dack(const dack &a);
        dack operator=(const dack &a);
        dack operator+(const dack &a);
        friend dack operator+(dack &a, int z){dack sum; sum=a; sum.push_r(z); return sum;}
        friend dack operator+(int z, dack &a) {dack sum; sum=a; sum.push_l(z); return sum;}
        friend ostream& operator << (ostream& out, dack &a){a.print_dack(); cout << endl;return out;}
        };
    int dack::push_l(int a){
        if(n>m){msv[l]=a; l=(l-1+n)%n; m++; return 0;}
        else return -1;
        }
    
    int dack::push_r(int a){
        if(n>m){msv[r]=a; r=(r+1)%n; m++; return 0;}
        else return -1;
        }
    
    int dack::pop_l(){
        if(m>0){l++; l%=n; m--; return 0;}
        else return -1;
 
        }
    int dack::pop_r(){
        if(m>0){r--; r=(r+n)%n; m--; return 0;}
        else return -1;
 
        }
        
    void dack::print_dack(){
        int i,c;
        for(i=(l+1)%n, c=0; c<m; c++, i=(i+1)%n) cout<<msv[i]<<" ";
    }
        
    dack::dack(const dack &a){
        int c, i;
        n=a.n;
        m=a.m;
        msv=new int[n];
        l=a.l;
        r=a.r;
        for (i=(l+1)%n, c=0; c<m; c++, i=(i+1)%n) msv[i]=a.msv[i];
    }
    
    dack dack::operator=(const dack &a){
        int c,i;
        delete msv;
        msv=new int [a.n];
        n=a.n;
        m=a.m;
        l=a.l;
        r=a.r;
        
        for (i=(l+1)%n, c=0; c<m; c++, i=(i+1)%n) msv[i]=a.msv[i];
        return *this;
    }
    
    dack dack::operator+(const dack &a){
        dack sum;
        int i, nms=a.n+n, ns=a.m+m;
        int ln;
        sum.msv=new int [nms];
        sum.m=ns;
        sum.n=nms;
        for(ln=(l+1)%n, i=1;i<m+1; i++, ln=(ln+1)%n) sum.msv[i]=msv[ln];
        for(ln=(a.l+1)%a.n;i<ns+1; i++,ln=(ln+1)%a.n) sum.msv[i]=a.msv[ln];
        sum.l=0; sum.r=ns+1;
        return sum;
    }
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.12.2015, 09:56
Ответы с готовыми решениями:

не работает префиксный оператор в классе
Проблема : не работает &quot;++plus&quot; в &quot;void ClassB::count()&quot; Есть вариант решить...

Неправильно работает оператор fabs()
К примеру программа: #include&lt;iostream&gt; #include&lt;math&gt; using namespace...

Неправильно работает перегруженный оператор
#include &lt;iostream&gt; using namespace std; class PhoneNumber { friend...

Проверьте задачку по циклам, неправильно работает. [думаю что неправильно]
Спасибо что решили зайти. Задание выгладит так: http://*******/PW95p А...

неправильно берёт x,y в классе ellips
#include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include &lt;cmath&gt; #include...

3
Kuzia domovenok
2358 / 2092 / 494
Регистрация: 25.03.2012
Сообщений: 7,491
Записей в блоге: 1
10.12.2015, 10:01 2
deque, неграмотная жертва ЕГЭ!
0
il_l
0 / 0 / 0
Регистрация: 10.12.2015
Сообщений: 2
10.12.2015, 10:03  [ТС] 3
Егэ не сдавал, так как живу не в России. А по теме ответы есть?
0
Tulosba
:)
Эксперт С++
4749 / 3243 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
10.12.2015, 11:43 4
il_l, у тебя в коде, конечно, мясо. Из того, что заметил:
1. оператор присваивания должен возвращать ссылку, а не значение.
2. для бинарного + достаточно свободной версии (дек, дек). Целые аргументы будут преобразовываться в дек неявно на основании конструктора, принимающего int.
3. dack operator+(const dack &a); вообще убрать надо.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.12.2015, 11:43

Неправильно работают методы в классе
Есть класс GameObject в котором есть виртуальный метод draw: class...

Переопределить оператор << в классе
Добрый день. Не пойму как переопределить оператор &lt;&lt; для моего класса ...

Перегруженный оператор = в классе String
Перегруженный оператор = почему то не работает, не могу разобраться в чем...


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

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

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