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

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

Восстановить пароль Регистрация
Другие темы раздела
C++ и снова строки http://www.cyberforum.ru/cpp-beginners/thread381561.html
Написать программу считывающую текст и выводящую слова, начинающиеся с гласной буквы.
C++ Абсолютная разность углов. Здравствуйте! Как найти минимальную разность углов? double alpha = 3,14159; double alpha2 = 175,12359; //double difference = ? Имеется в виду, что есть значение одного угла и второго, и неизвестно на сколько они больше 2 Пи, но надо на относительную разность на окружности. Или как привести угол к единичному вектору и обратно? http://www.cyberforum.ru/cpp-beginners/thread381554.html
C++ Вывести на экран слова перед которыми стоят запятая и пробел.
Вывести на экран слова перед которыми стоят запятая и пробел. Не могу понять как ее реализовать чайниг в этом деле) Добавлено через 6 минут int main() { char c; int k ; printf("\n VV symbol: "); scanf("%c", &c); int k = 0; while (c != '.')
C++ Удалить из списка все элементы с нечётными значениями и вывести указатель p2 на начало преобразованного списка.
Здравствуйте. Не получается решить задачу. Условие. Дан непустой двусвязный список. Удалить из списка все элементы с нечётными значениями и вывести указатель p2 на начало преобразованного списка. Если в результате удаления элементов список окажется пустым, то положить p2 = NULL. После удаления элементов из списка освобождать память, занимаемую этими элементами. Вот накарябал
C++ Разработать программу удаления в тексте, содержащемся в файле, лишних пробелов. http://www.cyberforum.ru/cpp-beginners/thread381543.html
Разработать программу удаления в тексте, содержащемся в файле, лишних пробелов.
C++ Посоветуйте книгу по динамичным структурам Можете посоветовать книгу, в которой было бы понятно описано списки, стеки, очереди, деревья, графы. На простом си подробнее

Показать сообщение отдельно
greeezz
272 / 165 / 4
Регистрация: 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

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