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

перегрузка операторов - C++

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 28, средняя оценка - 5.00
Smillles7
25 / 25 / 1
Регистрация: 23.04.2011
Сообщений: 130
11.11.2011, 01:32     перегрузка операторов #1
Имеется такая программа:
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
class reversion
{ 
    vector<int> mass1;
    vector<int> mass2;
    vector<int> rev1;
    vector<int> rev2;
        vector<int> mult1;
    vector<int> mult2;
    int len;
    public:
    reversion(){len=0;}
    void record1();      // Функция записывае в вектора mass1 и rev1 данные
    void record2();       // Функция записывае в вектора mass2 и rev2 данные
    reversion operator *(reversion mult);            // этот оператор делает определенные действия с векторами mass1 и rev1 и mass2 и rev2.
    reversion operator <<(reversion display); вывод на дисплей векторов mult1 и mult 2, которые были изменены через оператор *
};
void reversion::record1()
{   
    int x=1;
    int i=0;
    cout<<"Введите 1 массив"<<endl;
    cin>>x;
    for(int i=1;i<=x;i++)
        mass1.push_back(i);
    for(int i=0;i<x;i++)
        cout<<mass1[i]<<" ";
    cout<<endl;
    x=1;
    i=0;
    cout<<"Введите 1 перестановку"<<endl;
        for(int i=0;x!=0;i++)
        {
            cin>>x;
            if(x!=0)
            {
                rev1.push_back(x);
                k++;
            }
        }
        int z=0;
        for(int i=k-1;i>=0;i--)
            if(mass1[i]==rev1[i])
            {
                mass1.pop_back();
                rev1.pop_back();
                z++;
            }
            else
                break;
            k=k-z;
}
void reversion::record2()
{
    int x=1;
    int i=0;
    cout<<"Введите 2 массив"<<endl;
    cin>>x;
    for(int i=1;i<=x;i++)
        mass2.push_back(i);
    for(int i=0;i<x;i++)
        cout<<mass2[i]<<" ";
    cout<<endl;
        x=1;
        i=0;
    cout<<"Введите 2 перестановку"<<endl;
    for(int i=0;x!=0;i++)
        {
            cin>>x;
            if(x!=0)
            {
                rev2.push_back(x);
                p++;
            }
        }
        int z=0;
        for(int i=p-1;i>=0;i--)
            if(mass2[i]==rev2[i])
            {
                mass2.pop_back();
                rev2.pop_back();
                z++;
            }
            else
                break;
            p=p-z;
    cout<<endl;
}
reversion reversion::operator *(reversion mult)
{
    reversion D;
    int f=k;
    int z=0;
    if(k>p)
    {
        f=k;
        for(int i=p;i<k;i++)
        {
            D.mass2.push_back(i+1);
            D.rev2.push_back(i+1);
        }
    }
    if(k<p)
    {
        f=p;
        for(int i=k;i<p;i++)
        {
            D.mass1.push_back(i+1);
            D.rev1.push_back(i+1);
        }
    }
    
    int k=0;
    for(int i=0;i<f;i++)
    {
        k=D.rev1[i];
        for(int j=0;j<f;j++)
        {
            if(D.mass2[j]==k)
                D.mult2.push_back(rev2[j]);
        }
    }
    return D;
}
reversion reversion::operator <<(reversion display)
{
    reversion F;
    for(int i=0;i<p;i++)
        cout<<F.mult1[i]<<" ";
    cout<<endl;
    for(int i=0;i<p;i++)
        cout<<F.mult2[i]<<" ";
    cout<<endl<<endl;
    return F;
}
void main()
{  
    setlocale (LC_ALL,"RUS");
    reversion A;
    A.record1();
    reversion B;
    B.record2();
    reversion C;
    C<<A*B;         
    getch();
}
У меня такая проблема, когда вызывается оператор *, то он не видит то, что было проделано в функции record1(); видит только то что было в record2();

Добавлено через 34 минуты
Кто-нибудь знает почему так?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.11.2011, 01:32     перегрузка операторов
Посмотрите здесь:

Перегрузка операторов C++
C++ Перегрузка операторов
Перегрузка операторов С++ C++
C++ перегрузка операторов
Перегрузка операторов C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Bers
Заблокирован
11.11.2011, 01:43     перегрузка операторов #2
этот код вообще компилируется? Сколько ни разглядывал, но так и не нашёл где объявляется переменные p и k, фигурирующие в методах record1() и record12()

Так же не понятно, какое отношение эти методы имеют к оператору*
Smillles7
25 / 25 / 1
Регистрация: 23.04.2011
Сообщений: 130
11.11.2011, 01:51  [ТС]     перегрузка операторов #3
это не весь код)) код слишком большой) чтобы вас не путать) я его обрезал) переменные p и k не имеют значения(они объявлены в глобальной области) мне нужно понять почему оператор * не видит то, что было проделано в функции record1().
Bers
Заблокирован
11.11.2011, 01:59     перегрузка операторов #4
Цитата Сообщение от Smillles7 Посмотреть сообщение
это не весь код)) код слишком большой) чтобы вас не путать) я его обрезал) переменные p и k не имеют значения(они объявлены в глобальной области) мне нужно понять почему оператор * не видит то, что было проделано в функции record1().
Интересные люди! Выкладывают код, которые не компилируется. И говорят "а эта хрень не имеет значения". Я шо телепат что ли? Откуда я знаю, чего там и где ищё не достаёт?

Как я могу проверить работоспособность кода, если он даже не компилируется?
Если у меня нет исходных данных?

Вы в состоянии локализировать проблему?
Smillles7
25 / 25 / 1
Регистрация: 23.04.2011
Сообщений: 130
11.11.2011, 01:59  [ТС]     перегрузка операторов #5
вот полный код:
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
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
#include "stdafx.h"
#include <iostream>
#include <conio.h>
#include <vector>
using namespace std;
int s=2;
int k=0;
int p=0;
class reversion
{ 
    vector<int> mass1;
    vector<int> mass2;
    vector<int> rev1;
    vector<int> rev2;
    vector<int> mult1;
    vector<int> mult2;
    vector<int> feed1;
    vector<int> feed2;
    vector<int> ident1;
    vector<int> ident2;
    vector<int> ident3;
    int len;
    public:
    reversion(){len=0;}
    void record1();
    void record2();
    void displayrecord();
    void displaymultiplication();
    void feedback();
    void displayfeedback();
    void preidentity();
    void identity();
    reversion operator *(reversion mult);
    reversion operator ^(reversion feedback);
    reversion operator <<(reversion display);
 
};
void reversion::record1()
{   
    int x=1;
    int i=0;
    cout<<"Введите 1 массив"<<endl;
    cin>>x;
    for(int i=1;i<=x;i++)
        mass1.push_back(i);
    for(int i=0;i<x;i++)
        cout<<mass1[i]<<" ";
    cout<<endl;
    x=1;
    i=0;
    cout<<"Введите 1 перестановку"<<endl;
        for(int i=0;x!=0;i++)
        {
            cin>>x;
            if(x!=0)
            {
                rev1.push_back(x);
                k++;
            }
        }
        int z=0;
        for(int i=k-1;i>=0;i--)
            if(mass1[i]==rev1[i])
            {
                mass1.pop_back();
                rev1.pop_back();
                z++;
            }
            else
                break;
            k=k-z;
}
void reversion::record2()
{
    int x=1;
    int i=0;
    cout<<"Введите 2 массив"<<endl;
    cin>>x;
    for(int i=1;i<=x;i++)
        mass2.push_back(i);
    for(int i=0;i<x;i++)
        cout<<mass2[i]<<" ";
    cout<<endl;
        x=1;
        i=0;
    cout<<"Введите 2 перестановку"<<endl;
    for(int i=0;x!=0;i++)
        {
            cin>>x;
            if(x!=0)
            {
                rev2.push_back(x);
                p++;
            }
        }
        int z=0;
        for(int i=p-1;i>=0;i--)
            if(mass2[i]==rev2[i])
            {
                mass2.pop_back();
                rev2.pop_back();
                z++;
            }
            else
                break;
            p=p-z;
    cout<<endl;
}
void reversion::displayrecord()
{
    for(int i=0;i<k;i++)
        cout<<mass1[i]<<" ";
    cout<<endl;
    for(int i=0;i<k;i++)
        cout<<rev1[i]<<" ";
    cout<<endl<<endl;
    for(int i=0;i<p;i++)
        cout<<mass2[i]<<" ";
    cout<<endl;
    for(int i=0;i<p;i++)
        cout<<rev2[i]<<" ";
    cout<<endl;
}
reversion reversion::operator *(reversion mult)
{
    reversion D;
    int f=k;
    int z=0;
    if(k>p)
    {
        f=k;
        for(int i=p;i<k;i++)
        {
            D.mass2.push_back(i+1);
            D.rev2.push_back(i+1);
        }
    }
    if(k<p)
    {
        f=p;
        for(int i=k;i<p;i++)
        {
            D.mass1.push_back(i+1);
            D.rev1.push_back(i+1);
        }
    }
    
    int k=0;
    for(int i=0;i<f;i++)
    {
        k=D.rev1[i];
        for(int j=0;j<f;j++)
        {
            if(D.mass2[j]==k)
                D.mult2.push_back(rev2[j]);
        }
    }
    return D;
}
reversion reversion::operator ^(reversion feedback)
{
    reversion G;
        int j=1;
        int z=0;
    for(int i=1;i<k+1;i++)
    {
        for(int j=0;j<k;j++)
            if(G.mult2[j]==i)
                G.mult2.push_back(G.mult1[j]);
    }
    return G;
}
void reversion::displayfeedback()
{
    cout<<"Обратная перестановка"<<endl;
    for(int i=0;i<k;i++)
        feed1.push_back(mass1[i]);
    for(int j=0;j<k;j++)
        cout<<feed1[j]<<" ";
    cout<<endl;
    for(int i=0;i<k;i++)
        cout<<feed2[i]<<" ";
    cout<<endl;
}
void reversion::preidentity()
{
    for(int i=0;i<k;i++)
        ident1.push_back(mass1[i]);
    for(int i=0;i<k;i++)
        ident2.push_back(rev1[i]);
}
void reversion::identity()
{
    int r=0;
    int p=0;
    for(int i=0;i<k;i++)
    {
        r=0;
        p=rev1[i];
        for(int j=0;j<k;j++)
        {
            if(mass1[j]==p)
                ident3.push_back(ident2[j]);
        }
    }
    for(int i=0;i<k;i++)
    {
        if(ident1[i]==ident3[i])
            r++;
    }
        if(r==k)
        {
            cout<<"Тождественная перестановка"<<endl;
            cout<<"Наименьший к="<<s<<endl;
        }
        else
        {
            s++;
            ident2.clear();
        for(int j=0;j<k;j++)
            ident2.push_back(ident3[j]);
        ident3.clear();
        identity();
        }
}
reversion reversion::operator <<(reversion display)
{
    reversion F;
    for(int i=0;i<p;i++)
        cout<<F.mult1[i]<<" ";
    cout<<endl;
    for(int i=0;i<p;i++)
        cout<<F.mult2[i]<<" ";
    cout<<endl<<endl;
    return F;
}
void main()
{  
    setlocale (LC_ALL,"RUS");
    reversion A;
    A.record1();
    reversion B;
    B.record2();
    reversion C;
    C<<A*B;
    //z.record();
    //z.displayrecord();
    //cout<<endl<<"1 - Умножение, "<<"2 - Обратная перестановка, "<<"3 - Тождественная перестановка, "<<endl;
    //z.display();
    getch();
}
Bers
Заблокирован
11.11.2011, 02:06     перегрузка операторов #6
Цитата Сообщение от Smillles7 Посмотреть сообщение
в операторе * проделываются операции с элементами record1 и record2
Что вы имеете ввиду, называя record1() и record2() элементами?

record1() и record2() - это функции-методы. Это не элементы.Данными-членами класса являются шесть контейнеров. Оператор* работает с этими контейнерами. При чем тут record1() и record2() ?

Это ваш код?
Вы вообще понимаете, что этот код делает по факту, а что он должен делать по задумке?
Smillles7
25 / 25 / 1
Регистрация: 23.04.2011
Сообщений: 130
11.11.2011, 02:12  [ТС]     перегрузка операторов #7
я не имел ввиду что record1 и record 2 элементы, я имел ввиду что оператор * проделывает операции с элиментам(векторами) этих функций) код работает правильно, если не использовать перегрузку операций) а просто вызывать функции по порядку)
Bers
Заблокирован
11.11.2011, 02:20     перегрузка операторов #8
Цитата Сообщение от Smillles7 Посмотреть сообщение
я не имел ввиду что record1 и record 2 элементы, я имел ввиду что оператор * проделывает операции с элиментам(векторами) этих функций) код работает правильно, если не использовать перегрузку операций) а просто вызывать функции по порядку)
Я не понял, что должны делать методы record1(), record2()
Я попытался у себя скомпилировать. Я не понял, что от меня потребовалось вводить в консоль. Я нажимал первые попавшиеся цыферки, и у меня произошло рантайм-крушение.



Я так и не понял, что это за класс. Какую он выполняет роль, какую решает задачу, что от него пытается добиться автор.

Сам автор этого нигде ни в каких комментариях не указал. А и на вопросы внятно толком с расстановкой ответить не смог.

Не зная, какую задачу выполняет класс, и не зная, как он должен её выполнять, я не могу узнать, что именно с ним не так.


Предлагаю автору корректно, внятно, с толком, с расстановкой, сформулировать вопрос.

А заодно, уж коли его код будут читать другие люди - снабдить его методы и алгоритмы внятными комментариями. Что бы тот, кто будит читать код, знал точно, что чего хотел добиться автор.
Smillles7
25 / 25 / 1
Регистрация: 23.04.2011
Сообщений: 130
11.11.2011, 02:28  [ТС]     перегрузка операторов #9
в 1 посте в комментариях написано что делают эти функции
рантайм крушение произошло из за того что я и написал в 1 посте:
когда вызывается оператор *, то он не видит то, что было проделано в функции record1(); видит только то что было в record2();
программа такова:класс перестановки,(высшая математика) класс перемножает перестановки( чего я и хотел добиться через оператор *) находит обратную(оператор ^) и находит наименьший к(тождественная перестановка)
aeshes
 Аватар для aeshes
437 / 200 / 13
Регистрация: 07.10.2011
Сообщений: 462
11.11.2011, 03:44     перегрузка операторов #10
Это какой-то кошмар, а не класс. Зачем вам в нем столько векторов? Но попробую ответить на вопрос ТС
1)в функции main у вас написано
C++
1
2
3
4
5
6
reversion A;
        A.record1();
        reversion B;
        B.record2();
        reversion C;
        C<<A*B;
Т.е. для объекта А вы не вызываете метод record2() и не заполняете массивы mass2 и rev2. Для объекта В вы не вызываете метод record1() и не заполняете массивы mass1 и rev1 соответственно. Откуда ж эти данные там сами возьмутся?
2) ваш оператор * вообще никак не использует свои параметры (*this и mult), а работает с каким-то локальным объектом D
Bers
Заблокирован
11.11.2011, 03:55     перегрузка операторов #11
aeshes, проблема не в том, что код содержит баг.
А в том, что автор сам не понимает, какую задачу он пытается решить.
Он её даже сформулировать не может по человечески.
Smillles7
25 / 25 / 1
Регистрация: 23.04.2011
Сообщений: 130
11.11.2011, 04:22  [ТС]     перегрузка операторов #12
aeshes Спасибо что ответили на поставленный мной вопрос) столько векторов мне надо чтобы хранить данные каждой перестановки) Я плохо понимаю перегрузку операторов(точнее вообще не понимаю) не могли бы вы объяснить как мне реализовать данную перегрузку оператора *)
Bers Я уже сформулировал смысл задачи!!! я не так давно на этом форуме, но уже заметил что вы можете только критиковать и ничего не отвечать по делу! вы ради развлечений на этом форуме???
greeezz
11.11.2011, 04:51
  #13

Не по теме:

Smillles7, найдите книгу Дейтела "Как программировать на С++." В 11 главе (если пятое издание книги) вы найдете очень подробное и понятное описание перегрузки операторов с примерами.

Bers
Заблокирован
11.11.2011, 07:10     перегрузка операторов #14

Не по теме:

Цитата Сообщение от Smillles7 Посмотреть сообщение
Я уже сформулировал смысл задачи!!! я не так давно на этом форуме, но уже заметил что вы можете только критиковать и ничего не отвечать по делу! вы ради развлечений на этом форуме???
1. Формулировка не понятна. Толи вы сами не понимаете, чего хотите. Толи вы не умеете грамотно выражать свои мысли так, что бы вас мог понять человек, который изначально не в теме.

2. Если речь о коде, то я всегда стараюсь говорить по делу. Именно поэтому я критикую. И очень бы хотел, что бы меня тоже так же кто нибудь критиковал.

3. Да, я здесь ради развлечения.
Причем развлечение для меня - это узнавать новое о любимом с++



Я говорю вам строго по делу: нельзя решить задачу, которую не понимаешь.
Написать решение задачи не сложно. Сложно понять, что вы пытаетесь решить.

Если вы не сможете сформулировать задачу так, что бы другие люди вас смогли понять, они не смогут вам ничем помочь.

У вас проблема в коде не с "перегрузкой оператора", а вообще с самим классом. Вы сами толком не понимаете, что он делает. И зачем.

Вы не понимаете, зачем вашему классу столько векторов. Вы не понимаете, зачем внутри
разных методов создаются локальные объекты, и обрабатываются их данные, вместо того, что бы обрабатывать данные члены самого класса.

Зачем внутри оператора* был создан локальный объект D ?

И тп.
ValeryLaptev
Эксперт C++
1005 / 784 / 46
Регистрация: 30.04.2011
Сообщений: 1,595
11.11.2011, 08:59     перегрузка операторов #15
Цитата Сообщение от Smillles7 Посмотреть сообщение
Bers Я уже сформулировал смысл задачи!!! я не так давно на этом форуме, но уже заметил что вы можете только критиковать и ничего не отвечать по делу! вы ради развлечений на этом форуме???
Не... Задачу вы не сформулировали. Я тоже нифига не понял, для чего написан класс. Bers все правильно сказал: вы ни в одном посте не озвучили, что требуется-то ?
aeshes указала вам на очевидные ошибки.
Я пытался разобраться в классе, поскольку у меня вызывает большие сомнения двойные поля. Обычно в классе поля в одном экземпляре, а тут - всего по 2. Похоже, вы не только перегрузку не понимаете, а вообще не понимаете классы.
Дык сформулируйте задачу-то: что за класс, какие поля содержит, и что должна выполняет операция *. Скалярное произведение векторов? Видите, я за вас гадаю...
aeshes
 Аватар для aeshes
437 / 200 / 13
Регистрация: 07.10.2011
Сообщений: 462
11.11.2011, 15:13     перегрузка операторов #16
Smillles7, если меня не подводит память, то перестановка - это такая матрица с двумя строчками, где в первой строке - индексы i по порядку от 1 до N, а во второй строке записаны числа, соответствующие этим индексам (тоже от 1 до N, но в произвольном порядке). Например,
1 2 3 4 5 6
2 3 6 1 5 4
Так вот, тут вам нужно максимум 2 вектора, если вы хотите хранить эти наборы цифр отдельно.
Поэтому и удивилась количеству векторов.

Или вы под подстановкой понимаете что-то другое? И на форуме вряд ли все помнят, что такое умножение перестановок. Например, я не помню, поэтому и не могу написать, что вам переделать в операторе *, помимо отказа от локальной переменной D и использования параметров, с которыми оператор вызывается. Поэтому вопрос про постановку задачи остался открытым.
Deviaphan
11.11.2011, 15:26
  #17

Не по теме:

Цитата Сообщение от Smillles7 Посмотреть сообщение
перегрузка операторов)))
Операторов ))) не существует. Пичалька.

Smillles7
25 / 25 / 1
Регистрация: 23.04.2011
Сообщений: 130
11.11.2011, 21:17  [ТС]     перегрузка операторов #18
Цитата Сообщение от aeshes Посмотреть сообщение
Smillles7, если меня не подводит память, то перестановка - это такая матрица с двумя строчками, где в первой строке - индексы i по порядку от 1 до N, а во второй строке записаны числа, соответствующие этим индексам (тоже от 1 до N, но в произвольном порядке). Например,
1 2 3 4 5 6
2 3 6 1 5 4
Так вот, тут вам нужно максимум 2 вектора, если вы хотите хранить эти наборы цифр отдельно.
Поэтому и удивилась количеству векторов.

Или вы под подстановкой понимаете что-то другое? И на форуме вряд ли все помнят, что такое умножение перестановок. Например, я не помню, поэтому и не могу написать, что вам переделать в операторе *, помимо отказа от локальной переменной D и использования параметров, с которыми оператор вызывается. Поэтому вопрос про постановку задачи остался открытым.
Вы правильно поняли) 2 ыектора уходят на 1 перестановку, 2 на вторую перестановку, 1 вектор на их перемножение, 1 вектор на нахождение обратной перестановки и 3 вектор на тождественную перестановку))
Всем спасибо) сейчас буду читать книги) и попробовать сделать перегрузку, если не получиться напишу на форуме и полностью опишу программу и что она должна делать)))
ValeryLaptev
Эксперт C++
1005 / 784 / 46
Регистрация: 30.04.2011
Сообщений: 1,595
11.11.2011, 21:21     перегрузка операторов #19
Smillles7, обрати внимание на следующее: к лассе Перестановка должны быть поля ТОЛЬКО ДЛЯ ОДНОЙ перестановки. То есть массив индексов и массив чисел. Операция умножения перестановок использует 2 операнда, но эти два операнда - ДВА РАЗНЫХ ОБЪЕКТА- перестановки. Левым аргументом является текущий объект (см. this), правым - параметр операции. И еще результат - ТРЕТИЙ ОБЪЕКТ. В каждом из объектов - СОБСТВЕННЫЕ два массива. ТОЛЬКО ДВА.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.11.2011, 21:23     перегрузка операторов
Еще ссылки по теме:

Перегрузка операторов с++ C++
Перегрузка операторов C++
Перегрузка операторов C++

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

Или воспользуйтесь поиском по форуму:
aeshes
 Аватар для aeshes
437 / 200 / 13
Регистрация: 07.10.2011
Сообщений: 462
11.11.2011, 21:23     перегрузка операторов #20
Smillles7, тогда вы просто не понимаете, что такое классы. В классе Перестановка должно быть ровно 2 вектора (хотя можно и одним обойтись). А когда вы будете создавать перестановки А, В, вы должны в них заполнять эти 2 вектора - индексы и значения. Т.е., в А будет своя табличка
1 2 3 4
2 3 4 1
в В будет своя
1 2 3 4
2 1 4 3
Когда будете писать С=А*В, то в эти два вектора для объекта С запишется результат перестановки.
Т.е. С будет содержать табличку
1 2 3 4
3 4 1 2 (цифры написала произвольные, потому что не помню, что такое умножение перестановок)

Не надо в каждом объекте хранить векторы для всех действий над перестановками.

Опоздала) ValeryLaptev уже написал
Yandex
Объявления
11.11.2011, 21:23     перегрузка операторов
Ответ Создать тему
Опции темы

Текущее время: 05:31. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru