Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.87/39: Рейтинг темы: голосов - 39, средняя оценка - 4.87
26 / 26 / 4
Регистрация: 23.04.2011
Сообщений: 129

перегрузка операторов

11.11.2011, 01:32. Показов 8423. Ответов 38
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Имеется такая программа:
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 минуты
Кто-нибудь знает почему так?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
11.11.2011, 01:32
Ответы с готовыми решениями:

Что такое "перегрузка операторов"? Каковы принципы работы перегруженных операторов и назначение указателя this
Добрый день . Помогите понять принцип работы перегрузки операторов. объясните пожалуйста в зависимости от чего зависит агрумент при...

Перегрузка операторов
Доброго всем времени суток!Пожалуйста помогите мне неучу разобраться.Пытаюсь разобраться с классами,но пока безуспешно без посторонней...

Перегрузка операторов
Доброго времени суток. Начал изучать основы ООП, дошел до перегрузки операторов. В программе возникает ошибка при проверке любого...

38
26 / 26 / 4
Регистрация: 23.04.2011
Сообщений: 129
11.11.2011, 23:06  [ТС]
Студворк — интернет-сервис помощи студентам
Как то размыто я понял то что вы написали) Сейчас почитаю книгу Дейтела и попробую написать)

Добавлено через 55 минут
Если я вас правильно понял то получается что то типа этого:
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
#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> rev1;
    int len;
    public:
    reversion(){len=0;}
    void record1();
    void record2();
    reversion operator *();
    reversion operator <<();
 
};
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++)
        mass1.push_back(i);
    for(int i=0;i<x;i++)
        cout<<mass1[i]<<" ";
    cout<<endl;
        x=1;
        i=0;
    cout<<"Введите 2 перестановку"<<endl;
    for(int i=0;x!=0;i++)
        {
            cin>>x;
            if(x!=0)
            {
                rev1.push_back(x);
                p++;
            }
        }
        int z=0;
        for(int i=p-1;i>=0;i--)
            if(mass1[i]==rev1[i])
            {
                mass1.pop_back();
                rev1.pop_back();
                z++;
            }
            else
                break;
            p=p-z;
    cout<<endl;
}
reversion reversion::operator *()
{
    int f=k;
    int z=0;
    if(k>p)
    {
        f=k;
        for(int i=p;i<k;i++)
        {
            B.mass1.push_back(i+1);
            B.rev1.push_back(i+1);
        }
    }
    if(k<p)
    {
        f=p;
        for(int i=k;i<p;i++)
        {
            A.mass1.push_back(i+1);
            A.rev1.push_back(i+1);
        }
    }
    
    int k=0;
    for(int i=0;i<f;i++)
    {
        k=A.rev1[i];
        for(int j=0;j<f;j++)
        {
            if(B.mass2[j]==k)
                B.mult2.push_back(B.rev2[j]);
        }
    }
}
reversion reversion::operator <<()
{
    for(int i=0;i<p;i++)
        cout<<C.mass1[i]<<" ";
    cout<<endl;
    for(int i=0;i<p;i++)
        cout<<C.rev1[i]<<" ";
    cout<<endl<<endl;
}
void main()
{  
    setlocale (LC_ALL,"RUS");
    reversion A;
    A.record1();
    reversion B;
    B.record2();
    reversion C;
    C<<A*B;
    getch();
}
но тогда что нужно писать в аргументах операции * и <<
????
0
278 / 174 / 21
Регистрация: 10.07.2011
Сообщений: 441
11.11.2011, 23:29
в функции перегрузки операторов вам надо передать рефернсы на объекты над которыми вы собираетесь выполнять действия.
1
26 / 26 / 4
Регистрация: 23.04.2011
Сообщений: 129
11.11.2011, 23:31  [ТС]
Что такое референсы? покажите примерно как это делается))
0
 Аватар для talis
794 / 546 / 61
Регистрация: 11.05.2010
Сообщений: 1,298
Записей в блоге: 1
11.11.2011, 23:39
Цитата Сообщение от Smillles7 Посмотреть сообщение
Что такое референсы?
ссылки
0
Эксперт С++
1069 / 848 / 60
Регистрация: 30.04.2011
Сообщений: 1,659
11.11.2011, 23:40
Цитата Сообщение от Smillles7 Посмотреть сообщение
Что такое референсы? покажите примерно как это делается))
Референсы - это ссылки.
Прототип выглядит так:
C++
1
тип operator*(const тип& R);
1
26 / 26 / 4
Регистрация: 23.04.2011
Сообщений: 129
11.11.2011, 23:46  [ТС]
мне нужно передать два вектора и + несколько int переменных, а он жалуется что:
слишком много параметров для этой функции оператора)
0
Эксперт С++
1069 / 848 / 60
Регистрация: 30.04.2011
Сообщений: 1,659
11.11.2011, 23:54
Smillles7, одно из правил перегрузки операций - нельзя менять арность операции. Операция умножения - бинарная, поэтому операндов может быть только два: левый аргумент - текущий объект (для него не нужно параметра), и правый аргумент - это параметр перегружаемой операции.
1
278 / 174 / 21
Регистрация: 10.07.2011
Сообщений: 441
11.11.2011, 23:55
Цитата Сообщение от Smillles7 Посмотреть сообщение
мне нужно передать два вектора и + несколько int переменных, а он жалуется что:
слишком много параметров для этой функции оператора)
вам надо передать экземпляры класса в функцию перегрузки операторов, а не векторы.
Smillles7, сформулируйте четко задачу которую вы пытаетесь решить.попробую написать вам класс и функции перегрузки операторов которые вам нужны.
1
26 / 26 / 4
Регистрация: 23.04.2011
Сообщений: 129
11.11.2011, 23:56  [ТС]
Класс перестановка на n элементном множестве.
перестановки пример:
123456.....
352614
реализовать операции:
1) перемножение перестановок
т.е
1234 * 1234 = 1234
3241 * 2143 = 4132
2) нахождение обратной перестановки
3) Тождественная перестановка
Мне нужно что бы в void main было примерно так:
С=A*B^B;
т.е мы перемножаем две перестановки и потом находим обратную к этим перемноженым перестановкам(оператор ^)
0
278 / 174 / 21
Регистрация: 10.07.2011
Сообщений: 441
11.11.2011, 23:57
Цитата Сообщение от ValeryLaptev Посмотреть сообщение
левый аргумент - текущий объект (для него не нужно параметра)
ну это если функция перегрузки является членом класса. если функция глобальная то должна являтся другом класса и тогда нужны два аргумента.
1
Эксперт С++
1069 / 848 / 60
Регистрация: 30.04.2011
Сообщений: 1,659
11.11.2011, 23:59
Цитата Сообщение от greeezz Посмотреть сообщение
ну это если функция перегрузки является членом класса. если функция глобальная то должна являтся другом класса и тогда нужны два аргумента.
Да, конечно.
0
278 / 174 / 21
Регистрация: 10.07.2011
Сообщений: 441
12.11.2011, 07:10

Не по теме:

извиняюсь что долго не отвечал. задержался на занятиях. ну дело собственно не в этом


На текущий момент набросал реализацию класса, перегрузку оператора умножение operator* и оператора присвоения operator=. Также сделал небольшую функция print() которая в показательных целях печатает последовательность объекта перестановки.
выкладываю то что уже готово чтобы вы могли посмотреть, подумать, может какие вопросы позадавать ну и может на какие-то мысли вас наведет данный код.

объявление класса Перестановка class Perestanovka
файл Perestanovka.h

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
//Perestanovka class definition
#ifndef PERESTANOVKA_H
#define PERESTANOVKA_H
 
#include <vector>
using std::vector;
 
class Perestanovka{
 
public:
    Perestanovka();              //default constructor
    void setSequence(int [], const int);   //set values of permutation
    void print() const;          //print sequence of permutation
 
    const Perestanovka operator*(const Perestanovka &); //overloading operator *
    const Perestanovka &operator=(const Perestanovka &); //overloading assignment operator
 
private:
    int size;       //size of mySequence.
    vector<int> mySequence;
};
#endif


имплементация класса Перестановка
файл Perestanovka.cpp

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
// Perestanovka class implimentation
#include "stdafx.h"
#include "Perestanovka.h"
 
#include <iostream>
 
// default constructor
Perestanovka::Perestanovka() {       
}
 
//сохраняем последовательность в поле объект
void Perestanovka::setSequence(int arr[], const int arrSize){ 
    size = arrSize;
    for(int  i = 0; i < size; ++i){
        mySequence.push_back(arr[i]);
    }
}
 
//печатаем имеющуюся в объекте последовательность
void Perestanovka::print() const{   
    for(int  i = 0; i < size; ++i){
        std::cout << mySequence.at(i) << " ";
    }
}
 
// перегрузка оператора умножение
const Perestanovka Perestanovka::operator*(const Perestanovka &right){ 
    Perestanovka result;
    if(size == right.size){
        for(int i = 0; i < size; ++i){  
            result.mySequence.push_back(right.mySequence.at((this->mySequence.at(i))-1));
        }
        result.size = size;
    }
    return result;
}
 
// перегрузка оператора присвоения
const Perestanovka &Perestanovka::operator=(const Perestanovka &right){
    this->mySequence = right.mySequence;
    this->size = right.size;
 
    return *this;
}


ну и файл откуда все запускаем
main.cpp

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
#include "stdafx.h"
#include "Perestanovka.h"
#include <iostream>
using std::cout;
using std::endl;
 
void processing();      // прототип функции
 
int main()
{
    processing();       // запускаем наше хозяйство
    system("pause");
    return 0;
}
 
void processing(){
    const int size = 4;         
    int arr[size] = {3,2,4,1};  
    int arr2[size] = {2,1,4,3};
 
    Perestanovka a;   //создаем новый пустой объект a
    Perestanovka b;   //создаем новый пустой объект b
    Perestanovka c;   //создаем новый пустой объект c
    a.setSequence(arr, size);   //заполняем поля объекта
    b.setSequence(arr2, size);  //заполняем поля объекта
    
    cout << "Posledovatelnost perovoi perestanovki : ";
    a.print();  //печатаем объект а
    cout << endl;
 
    cout << "Posledovatelnost perovoi perestanovki : ";
    b.print(); //печатаем объект b
    cout << endl;
 
    c = a*b;        //Выполняем уножение перестановок
 
    cout << "\nRezultat umnozheniya : ";
    c.print(); //печатаем объект с
    cout << endl;
}


P.S. код протестирован в среде windows. работает корректно

Добавлено через 1 час 36 минут
Smillles7, Мне нужно что бы в void main было примерно так:
С=A*B^B;
т.е мы перемножаем две перестановки и потом находим обратную к этим перемноженым перестановкам(оператор ^)
Я так понимаю что НАХОЖДЕНИЕ обратной последовательности к этим перемноженным это обратная последовательность к результату перемножения (A*B).
А почему в формуле тогда написано ^B ? Что это значит?

Вообще с обратной перестановкой все просто.
если имеем:
3,1,4,2
то обратная перестановка будет:
2 4 1 3
для проверки умножаем перестановку на обратную и получаем единичную перестановку
1 2 3 4

Что такое Тождественная перестановка ?
1
26 / 26 / 4
Регистрация: 23.04.2011
Сообщений: 129
12.11.2011, 11:30  [ТС]
Цитата Сообщение от greeezz Посмотреть сообщение
Я так понимаю что НАХОЖДЕНИЕ обратной последовательности к этим перемноженным это обратная последовательность к результату перемножения (A*B).
А почему в формуле тогда написано ^B ? Что это значит?
Вы правильно поняли, это моя опечатка)
Что такое Тождественная перестановка ?
тождественная перестановка это нахождения наименьшего к, где наша перестановка будет возводиться в степень к, пока не получиться единичная перестановка)))

Добавлено через 8 минут
скажите зачем вы пишите в 6 строке:
using std::vector;
что значит at(i) в 22 строке?
и что значит это в 31 строке в частности this и стрелочка: (this->mySequence.at(i))-1))

Добавлено через 59 секунд
а так в принципе все остальное понятно) Огромное спасибо)
0
278 / 174 / 21
Регистрация: 10.07.2011
Сообщений: 441
12.11.2011, 19:35
Цитата Сообщение от Smillles7 Посмотреть сообщение
скажите зачем вы пишите в 6 строке:
using std::vector;
это я уточняю для себя и программы что именно я использую из стандартного пространства имен. нам же не нужно все пространство. вот я и беру только то что мне надо.
Цитата Сообщение от Smillles7 Посмотреть сообщение
что значит at(i) в 22 строке?
C++
1
mySequence.at(i)
возвращает значение элемента вектора находящегося на позиции i.
Цитата Сообщение от Smillles7 Посмотреть сообщение
что значит это в 31 строке в частности this и стрелочка: (this->mySequence.at(i))-1))
this это указатель на текущий объект. т.е. на объект который вызывает функцию. при работе с указателями стрелка -> это тоже самое что и точка при работе с именем объекта.
this->myMethod() можно записать как (*this).MyMethod()
0
Делаю внезапно и красиво
Эксперт С++
 Аватар для Deviaphan
1313 / 1228 / 72
Регистрация: 22.03.2011
Сообщений: 3,744
12.11.2011, 19:57
Цитата Сообщение от greeezz Посмотреть сообщение
this->MyMethod() можно записать как (*this).MyMethod()
Или просто MyMethod()
0
278 / 174 / 21
Регистрация: 10.07.2011
Сообщений: 441
12.11.2011, 20:07
Цитата Сообщение от Deviaphan Посмотреть сообщение
Или просто MyMethod()
да, конечно.
просто я сторался сделать код подробнее, чтобы автору было нагляднее представлять картину работы объектов.
0
26 / 26 / 4
Регистрация: 23.04.2011
Сообщений: 129
12.11.2011, 23:15  [ТС]
мне нужно еще чтобы если перестановки разных размеров, то я должен дописать в перестановку соответствующие элементы до совпадения размеров перестановок))
примерно так:
1 перестановка:
1423
2 перестановка:
132
то у меня вторая перестановка должна измениться на такую:
1324

насколько я понял mySequence это 1 перестановка, а right.mySequence 2 перестановка в перегрузке оператора *
тогда почему я не могу сделать так:
C++
1
2
3
4
5
6
if(size>right.size)
    for(int i=right.size;i<size;i++)
        right.mysequence.push_back(i+1);                    // жалуется здесь на . после mysequence
    if(size<right.size)
        for(int i=size;i<right.size;i++)
                mysequnce.push_back(i+1);
0
278 / 174 / 21
Регистрация: 10.07.2011
Сообщений: 441
13.11.2011, 03:41
Цитата Сообщение от Smillles7 Посмотреть сообщение
тогда почему я не могу сделать так:
в метод перегрузки оператора * передается адрес объекта который для функция константный. вы не можете изменять константные объекты. смотрите строку 39.
C++
1
... (const Perestanovka &right) ...
если вы хотите изменить объект справа то он не должен быть константным
1
26 / 26 / 4
Регистрация: 23.04.2011
Сообщений: 129
13.11.2011, 21:44  [ТС]
как запустить рекурсию в операторе????
C++
1
2
3
4
5
6
7
const reversion reversion::operator %(const reversion &right)
{            ......
                 ......
                      ......
         reversion::operator %(right);            // можно ли ее так запустить
        
}
Добавлено через 4 часа 40 минут
обошелся без рекурсии)))
программа готова))
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
#include "stdafx.h"
#include <iostream>
#include <conio.h>
#include <vector>
using namespace std;
int z=2;
class reversion
{ 
public:
    public:
        reversion(){}
    void reversion::record(int [], int);
 
    const reversion operator*(reversion &);
    const reversion &operator=(const reversion &);
    const reversion operator^(const reversion &);
    const reversion operator%(const reversion &);
private:
    int k;
    int size;
    vector<int> myRevers;
};
void reversion::record(int rev[], int revsize)
{
    size=revsize;
    for(int i=0;i<size;i++)
        myRevers.push_back(rev[i]);
    for(int i=size;i>0;i--)
            if(i==rev[i])
                myRevers.pop_back();
            else
                break;
}
const reversion reversion::operator *(reversion &right)
{
    reversion result;
    int z=0;
    int f=size;
    if(size>right.size)
    {
        f=size;
        for(int i=right.size;i<size;i++)
            right.myRevers.push_back(i+1);
    }
    if(size<right.size)
    {
        for(int i=size;i<right.size;i++)
            myRevers.push_back(i+1);
        size=right.size;
    }
    int k=0;
    for(int i=0;i<size;i++)
    {
        k=myRevers[i];
        for(int j=0;j<size;j++)
        {
            if(j+1==k)
                result.myRevers.push_back(right.myRevers[j]);
        }
    }
    result.size=size;
    return result;
}
const reversion reversion::operator ^(const reversion &right)
{
    reversion temp;
    for(int i=1;i<=right.size;i++)
    {
        for(int j=0;j<right.size;j++)
            if(right.myRevers[j]==i)
                temp.myRevers.push_back(j+1);
    }
    temp.size=right.size;
    return temp;
}
const reversion reversion::operator %(const reversion &right)
{
    reversion temp1;
    size=right.size;
    this->myRevers=right.myRevers;
    vector<int> ident;
    int p;
    int r=0;
    while(r!=size)
    {
        for(int i=0;i<size;i++)
    {
        p=right.myRevers[i];
        for(int j=0;j<size;j++)
        {
            if(j+1==p)
                ident.push_back(myRevers[j]);
        }
    }
    for(int i=0;i<size;i++)
    {
        if(i+1==ident[i])
            r++;
    }
        if(r!=size)
        {
            z++;
            myRevers.clear();
        for(int j=0;j<size;j++)
            myRevers.push_back(ident[j]);
        ident.clear();
        }
    }
        temp1.k=z;
        temp1.myRevers=ident;
        temp1.size=size;
        return temp1;
}
const reversion &reversion::operator=(const reversion &right)
{
        this->myRevers=right.myRevers;
        this->size=right.size;
        this->k=right.k;
        cout<<"Перестановка:"<<endl;
        for(int i=0;i<size;i++)
        cout<<myRevers[i]<<" ";
        cout<<endl<<"наименьший к="<<k;
        return *this;
}
void main()
{  
    setlocale (LC_ALL,"RUS");
    int size1;
    cout<<"Введите кол-во элементов в 1 перестановке"<<endl;
    cin>>size1;
        int *rev1=new int [size1];
        int x=1;
    cout<<"Введите 1 перестановку"<<endl;
        for(int i=0;i<size1;i++)
        {
            cin>>x;
            rev1[i]=x;
        }
        int size2;
        cout<<"Введите кол-во элементов во 2 перестановке"<<endl;
    cin>>size2;
        int *rev2=new int [size2];
    cout<<"Введите 2 перестановку"<<endl;
        for(int i=0;i<size2;i++)
        {
            cin>>x;
            rev2[i]=x;
        }
        reversion A;
        reversion B;
        reversion C;
        reversion D;
        reversion Z;
        A.record(rev1,size1);
        B.record(rev2,size2);
        C=Z%(D^(A*B));
    getch();
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
13.11.2011, 21:44

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

Перегрузка операторов
Создайте класс Fraction (обыкновенная дробь), в котором реализовать перегрузку: оператора суммирования дробей, оператора суммирования дроби...

Перегрузка операторов!
Создать несколько объектов (например, a и b) разработанного класса. Класс – символьная строка. Реализовать для объектов данного класса...

перегрузка операторов
Это часть хедера(весь большеват) #include &lt;iostream&gt; #include &lt;cstdio&gt; using namespace std; class mString{ char *str; ...

Перегрузка операторов
Доброго времени суток! Столкнулся с такой проблемой, перегрузка операторов. Имею работающий код, но не смог сделать по своему заданию. ...


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

Или воспользуйтесь поиском по форуму:
39
Ответ Создать тему
Новые блоги и статьи
Часы электронные
Uhbif79 12.08.2026
Выкладываю программу часов. Программа позволяет: 1. Использовать системное время и дату, 2. Есть возможность вводить время и дату вручную. 3. Реализованы 2 будильника: начало и конец рабочего дня. . . .
Часы с будильником на основе класса QLCDNumber
Uhbif79 12.08.2026
Всем добрый день, выкладываю программу часов с будильником на основе класса QLCDNumber. Здесь я пробовал самостоятельно создавал классы, впервые столкнулся с видимостью переменной одного класса из. . .
Установка MinGW GCC 16.2 и CMake
8Observer8 10.08.2026
VK Видео: https:/ / vkvideo. ru/ video-240781534_456239017 YouTube: eY5-5PyI9NM Текстовая версия
Неделя из жизни имитационной модели склада: мои кривые руки растут, откуда надо
anaschu 10.08.2026
Неделя из жизни имитационной модели склада: как я почти написал неправильную логику и что с этим делать Работаю сейчас над учебно-рабочим проектом: строю в AnyLogic имитационную модель процессов. . .
Калькулятор для расчета родства
russiannick 07.08.2026
1. Задача: Создать калькулятор для расчета родства. Родственных связей существует 8 ступеней, такие как: p - отец P - мать q - муж Q - жена b - брат B - сестра s - сын S - дочь
Мир по моей воле
kumehtar 07.08.2026
Когда-то кажется, что всё просто. Ты весь такой светлый. Причиняешь добро. Борешься за справедливость в этом тёмном мире. Потом начинаешь замечать одну неприятную вещь. Почти каждый хороший. . .
Кредитный калькулятор
Maks 05.08.2026
Решение задачи по прикладной информатике средствами 1С. Задача: Напишите приложение-калькулятор, которое помогает рассчитывать параметры кредита для аннуитетного и дифференцированного видов. . .
У нас сейчас поговорку "Опять 25" нужно переделать на "Опять +35".
kumehtar 04.08.2026
С ностальгией вспоминаю времена моего детства, когда у нас и правда +25 - была максимальная температура летом. Раньше +25 °C реально казались вершиной жары, когда можно было весь день пропадать на. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru