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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Максим_Воробьев
1 / 1 / 0
Регистрация: 29.03.2016
Сообщений: 51
#1

Реализовать добавление переопределения операций или отношений - C++

15.04.2016, 13:09. Просмотров 471. Ответов 28
Метки нет (Все метки)

Прошу помочь реализовать в этом коде добавление переопределения операций или отношений.
Работа операций должна отображаться на мониторе.
Как лучше это сделать?

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
#include <iostream>
#include <string>
#include <vector>
 
namespace cf{
    // класс игрок который наследуется от базового
    class Player {
            public:
            std::string m_name; // имя игрока
            size_t m_bDay;          // год рождения
            Player(std::string name = std::string(), size_t bDay = 0) : 
                            m_name(name), m_bDay(bDay){} // конструктор с параметрами
            Player(const Player & p){ // конструктор копирования
                m_name = p.m_name;
                m_bDay = p.m_bDay;
            }
            Player & operator=(const Player & p){ // перегруженный оператор =
                m_name = p.m_name;
                m_bDay = p.m_bDay;
            }
            virtual void print() const{ // реализация функции печати наследовано от базового класса
                            std::cout << m_name << " " << m_bDay << std::endl;
                        }
                        virtual ~Player(){} // деструктор
    };
    
    // класс футбольной команды наследуется от базового
    class FTeam {
        private:
            std::vector<Player> team; // список игроков в команде
            std::string liga;               // название лиги
            std::string name;                   // название команды
            Player trainer;                     // тренер
            size_t wins;                            // количество побед
            size_t defeat;                      // количество поражений
        public:
                FTeam() : trainer(), name(std::string()), liga(std::string()), wins(0), defeat(0){} // конструктор по умолчанию
                void add(Player p){ // добавление игрока в команду
                    team.push_back(p);
                }
                FTeam(Player t, std::string n, std::string l, size_t w = 0, size_t d = 0) : trainer(t), 
                            name(n), liga(l), wins(w), defeat(d){} // конструктор с параметрами
                FTeam(const FTeam & ft){ // конструктор копирования
                    team = ft.team;
                    liga = ft.liga;
                    name = ft.name;
                    trainer = ft.trainer;
                    wins = ft.wins;
                    defeat = ft.defeat;
                }
                virtual void print() const{ // реализация функции печати наследовано от базового класса
                    std::cout << "Team : " << name << std::endl;
                    std::cout << "Liga : " << liga << std::endl;
                    std::cout << "Trainer : " << trainer.m_name << std::endl;
                    for(size_t i = 0; i < team.size(); ++i){
                        team[i].print();
                    }
                    std::cout << "----------------------------------------------------"  << std::endl;
                }
                // Сеттеры и Геттеры
                void setTrainer(Player p){
                    trainer = p;
                }
                const Player & getTrainer() const{
                    return trainer;
                }
                void setLiga(std::string s){
                    liga = s;
                }
                const std::string & getLiga() const{
                    return liga;
                }
                void setNameTeam(std::string s){
                    name = s;
                }
                const std::string & getNameTeam() const{
                    return name;
                }
                void addWin(){
                    ++wins;
                }
                size_t getWins() const{
                    return wins;
                }
                void resetWins(){
                    wins = 0;
                }
                void addDefeat(){
                    ++defeat;
                }
                size_t getDefeat() const{
                    return defeat;
                }
                void resetDefeat(){
                    defeat = 0;
                }
                virtual ~FTeam(){}
    };
    
    // класс футбольного менеджера, наследуется от базового
    class FTeamManager {
        private:
                std::vector<FTeam> teams; // список команд
        public:
                void add(FTeam ft){ // добавление команды
                    teams.push_back(ft);
                }
                void findFTeam(std::string nameTeam){
                    for(size_t i = 0; i < teams.size(); ++i){
                        if(teams[i].getNameTeam() == nameTeam)
                            teams[i].print();
                    }
                }
                
                virtual void print() const{ // реализация функции печати наследовано от базового класса
                    for(size_t i = 0; i < teams.size(); ++i){
                        teams[i].print();
                    }
                }
                virtual ~FTeamManager(){} // диструктор
    };
    
    // фабрика классов для создания объектов
    class InputDataFTeam{ 
        public:
            
            static Player getPlayer(){ // получение объекта игрока
                std::string name;
                size_t bDay = 0;
                std::cout << "input name palyer : "; getline(std::cin, name);
                std::cout << "input birthday player : "; std::cin >> bDay;
                std::cin.get();
                
                return Player(name, bDay);
            }
            
            static FTeam getFTeam(){ // получения объекта команды
                std::string nameTrainer;
                std::string nameTeam;
                std::string nameLiga;
                size_t bDay = 0;
                std::cout << "input name trainer : "; getline(std::cin, nameTrainer);
                std::cout << "input name team : "; getline(std::cin, nameTeam);
                std::cout << "input name liga : "; getline(std::cin, nameLiga);
                std::cout << "input birthday trainer : "; std::cin >> bDay;
                std::cin.get();
                     
                return FTeam(cf::Player(nameTrainer, bDay), nameTeam, nameLiga);
            }
    };
}
 
int main(){
    
    cf::FTeamManager ftm; // объявляем объект класса менеджера
    
    // создаем объекты команд с параметрами
    cf::FTeam ft1(cf::InputDataFTeam::getFTeam());
    cf::FTeam ft2(cf::InputDataFTeam::getFTeam());
    cf::FTeam ft3(cf::InputDataFTeam::getFTeam());
    
    //добавляем игроков в команды
    ft1.add(cf::InputDataFTeam::getPlayer());
    ft1.add(cf::InputDataFTeam::getPlayer());
    ft1.add(cf::InputDataFTeam::getPlayer());
    
    ft2.add(cf::InputDataFTeam::getPlayer());
    ft2.add(cf::InputDataFTeam::getPlayer());
    ft2.add(cf::InputDataFTeam::getPlayer());
    
    ft3.add(cf::InputDataFTeam::getPlayer());
    ft3.add(cf::InputDataFTeam::getPlayer());
    ft3.add(cf::InputDataFTeam::getPlayer());
    
    //добавляем команды менеджеру 
    ftm.add(ft1);
    ftm.add(ft2);
    ftm.add(ft3);
    
    //поиск определенной команды по названию и вывод данных о ней
    std::string findFteam; 
    std::cout << "Input team name for find : "; getline(std::cin, findFteam); 
    ftm.findFTeam(findFteam);
    
    // выводим данные всех команд, которыми "управляет" менеджер
    std::cout << std::endl;
    std::cout << std::endl;
    std::cout << std::endl;
    ftm.print();
    
    return 0;
}
Добавлено через 3 часа 8 минут
Буду очень благодарен если кто-нибудь поможет
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.04.2016, 13:09     Реализовать добавление переопределения операций или отношений
Посмотрите здесь:

Реализовать перегрузку операций - C++
Кроме того, необходимо реализовать перегрузку операций сложения, вычитания, скалярного и векторного произведения. Я читал про...

Реализовать перегрузку операций = и == - C++
Вообщем есть такое задание Создать 2 объекта a и b, разработанного класса – символьная строка, реализовать перегрузку операций = и == . ...

Реализовать указатель на любую из функций математических операций - C++
Написать четыре функции, которые + - * / два числа Указатель на ф-ю (может принять адрес любой выше указанной функции) Через указатель...

Реализовать макроопределения и применить их в программе для определения операций - C++
Реализовать макроопределения и применить их в программе для определения операций.

Реализовать абстрактную таблицу и дать оценку времени выполнения основных операций - C++
Здравствуйте, дали задание реализовать абстрактную таблицу и дать оценку времени выполнения основных операций. Оценку дать думаю не состоит...

Реализовать класс Строка (String) для хранения и выполнения операций над строкой - C++
Реализовать класс Строка (String) для хранения и выполнения операций над строкой. Строка должна храниться в виде динамического массива...

Реализовать в виде модуля набор подпрограмм для выполнения следующих операций над векторами - C++
Нужно написать это на СИ! Реализовать в виде модуля набор подпрограмм для выполнения следующих операций над векторами: 1)сложения; ...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Максим_Воробьев
1 / 1 / 0
Регистрация: 29.03.2016
Сообщений: 51
18.04.2016, 15:51  [ТС]     Реализовать добавление переопределения операций или отношений #21
avgoor, Мне бы для наглядности, а то я уже совсем запутался
avgoor
884 / 519 / 112
Регистрация: 05.12.2015
Сообщений: 1,464
18.04.2016, 15:57     Реализовать добавление переопределения операций или отношений #22
Цитата Сообщение от Максим_Воробьев Посмотреть сообщение
запутался
Что непонятно?
Максим_Воробьев
1 / 1 / 0
Регистрация: 29.03.2016
Сообщений: 51
18.04.2016, 16:46  [ТС]     Реализовать добавление переопределения операций или отношений #23
avgoor, Так как я понял класс class InputDataFTeam полностью убирается.
Дальше вместо этого в программе прописывается
C++
1
2
3
4
5
std::basic_istream<char>& operator>>(std::basic_istream<char>& in, cf::Player& p)
{
    std::getline(in, p.m_name);
    in >> p.m_bDay;
}
это вместо getPlayer, а вместо getFteam прописывается это
C++
1
std::basic_ostream<char>& operator<<(std::basic_ostream<char>& in, const cf::Player& p)
так? То есть в программе это получается так
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
#include <iostream>
#include <string>
#include <vector>
 
namespace cf{
    // класс игрок который наследуется от базового
    class Player {
            public:
            std::string m_name; // имя игрока
            size_t m_bDay;          // год рождения
            Player(std::string name = std::string(), size_t bDay = 0) : 
                            m_name(name), m_bDay(bDay){} // конструктор с параметрами
            Player(const Player & p){ // конструктор копирования
                m_name = p.m_name;
                m_bDay = p.m_bDay;
            }
            Player & operator=(const Player & p){ // перегруженный оператор =
                m_name = p.m_name;
                m_bDay = p.m_bDay;
            }
            virtual void print() const{ // реализация функции печати наследовано от базового класса
                            std::cout << m_name << " " << m_bDay << std::endl;
                        }
                        virtual ~Player(){} // деструктор
    };
    
    // класс футбольной команды наследуется от базового
    class FTeam {
        private:
            std::vector<Player> team; // список игроков в команде
            std::string liga;               // название лиги
            std::string name;                   // название команды
            Player trainer;                     // тренер
            size_t wins;                            // количество побед
            size_t defeat;                      // количество поражений
        public:
                FTeam() : trainer(), name(std::string()), liga(std::string()), wins(0), defeat(0){} // конструктор по умолчанию
                void add(Player p){ // добавление игрока в команду
                    team.push_back(p);
                }
                FTeam(Player t, std::string n, std::string l, size_t w = 0, size_t d = 0) : trainer(t), 
                            name(n), liga(l), wins(w), defeat(d){} // конструктор с параметрами
                FTeam(const FTeam & ft){ // конструктор копирования
                    team = ft.team;
                    liga = ft.liga;
                    name = ft.name;
                    trainer = ft.trainer;
                    wins = ft.wins;
                    defeat = ft.defeat;
                }
                virtual void print() const{ // реализация функции печати наследовано от базового класса
                    std::cout << "Team : " << name << std::endl;
                    std::cout << "Liga : " << liga << std::endl;
                    std::cout << "Trainer : " << trainer.m_name << std::endl;
                    for(size_t i = 0; i < team.size(); ++i){
                        team[i].print();
                    }
                    std::cout << "----------------------------------------------------"  << std::endl;
                }
                // Сеттеры и Геттеры
                void setTrainer(Player p){
                    trainer = p;
                }
                const Player & getTrainer() const{
                    return trainer;
                }
                void setLiga(std::string s){
                    liga = s;
                }
                const std::string & getLiga() const{
                    return liga;
                }
                void setNameTeam(std::string s){
                    name = s;
                }
                const std::string & getNameTeam() const{
                    return name;
                }
                void addWin(){
                    ++wins;
                }
                size_t getWins() const{
                    return wins;
                }
                void resetWins(){
                    wins = 0;
                }
                void addDefeat(){
                    ++defeat;
                }
                size_t getDefeat() const{
                    return defeat;
                }
                void resetDefeat(){
                    defeat = 0;
                }
                virtual ~FTeam(){}
    };
    
    // класс футбольного менеджера, наследуется от базового
    class FTeamManager {
        private:
                std::vector<FTeam> teams; // список команд
        public:
                void add(FTeam ft){ // добавление команды
                    teams.push_back(ft);
                }
                void findFTeam(std::string nameTeam){
                    for(size_t i = 0; i < teams.size(); ++i){
                        if(teams[i].getNameTeam() == nameTeam)
                            teams[i].print();
                    }
                }
                
                virtual void print() const{ // реализация функции печати наследовано от базового класса
                    for(size_t i = 0; i < teams.size(); ++i){
                        teams[i].print();
                    }
                }
                virtual ~FTeamManager(){} // диструктор
    };
    
std::basic_istream<char>& operator>>(std::basic_istream<char>& in, cf::Player& p)
{
    std::getline(in, p.m_name);
    in >> p.m_bDay;
}
 
std::basic_ostream<char>& operator<<(std::basic_ostream<char>& in, const cf::Player& p)
   
}
 
int main(){
    
    cf::FTeamManager ftm; // объявляем объект класса менеджера
    
    // создаем объекты команд с параметрами
    cf::FTeam ft1(cf::InputDataFTeam::getFTeam());
    cf::FTeam ft2(cf::InputDataFTeam::getFTeam());
    cf::FTeam ft3(cf::InputDataFTeam::getFTeam());
    
    //добавляем игроков в команды
    ft1.add(cf::InputDataFTeam::getPlayer());
    ft1.add(cf::InputDataFTeam::getPlayer());
    ft1.add(cf::InputDataFTeam::getPlayer());
    
    ft2.add(cf::InputDataFTeam::getPlayer());
    ft2.add(cf::InputDataFTeam::getPlayer());
    ft2.add(cf::InputDataFTeam::getPlayer());
    
    ft3.add(cf::InputDataFTeam::getPlayer());
    ft3.add(cf::InputDataFTeam::getPlayer());
    ft3.add(cf::InputDataFTeam::getPlayer());
    
    //добавляем команды менеджеру 
    ftm.add(ft1);
    ftm.add(ft2);
    ftm.add(ft3);
    
    //поиск определенной команды по названию и вывод данных о ней
    std::string findFteam; 
    std::cout << "Input team name for find : "; getline(std::cin, findFteam); 
    ftm.findFTeam(findFteam);
    
    // выводим данные всех команд, которыми "управляет" менеджер
    std::cout << std::endl;
    std::cout << std::endl;
    std::cout << std::endl;
    ftm.print();
    
    return 0;
}
на этом этапе все правильно я понял?
avgoor
884 / 519 / 112
Регистрация: 05.12.2015
Сообщений: 1,464
18.04.2016, 18:56     Реализовать добавление переопределения операций или отношений #24
Цитата Сообщение от Максим_Воробьев Посмотреть сообщение
это вместо getPlayer, а вместо getFteam прописывается это
std::basic_ostream<char>& operator<<(std::basic_ostream<char>& in, const cf::Player& p)
Не, это прописывается вместо Team::print()

Цель этих переопределений - чтоб ваши классы вели себя относительно потоков чтения/записи как встроенные типы.

int i;
std::cin>>i; Что это значит?

сf::Player p;
std::cin>>p; А это?
Максим_Воробьев
1 / 1 / 0
Регистрация: 29.03.2016
Сообщений: 51
18.04.2016, 19:40  [ТС]     Реализовать добавление переопределения операций или отношений #25
avgoor, Я еще больше запутался где вы нашли
C++
1
Team::print()
?
И как же тогда getFteam куда девается?
avgoor
884 / 519 / 112
Регистрация: 05.12.2015
Сообщений: 1,464
18.04.2016, 19:45     Реализовать добавление переопределения операций или отношений #26
Цитата Сообщение от Максим_Воробьев Посмотреть сообщение
avgoor, Я еще больше запутался где вы нашли
Team::print()
Этот код вы писали?
Или не понятно что имелось ввиду ваше FTeam::print()?
Вы отличаете operator>> и operator<<?
Максим_Воробьев
1 / 1 / 0
Регистрация: 29.03.2016
Сообщений: 51
18.04.2016, 20:16  [ТС]     Реализовать добавление переопределения операций или отношений #27
avgoor, Ммм... ура кажется получилось все заработал почитал еще кое какую доп. литературу вроде понял. Спасибо!

Добавлено через 15 минут
avgoor, Прости за вопрос, вот если например я ввиду изменения в программу то первое что вы мне посоветовали это вот это
C++
1
2
3
4
5
6
7
8
9
class FTeam {
...
    FTeam& operator+=(const Player& p) {
        team.push_back(p);
    }
...
Вызывать соответственно:
 
ft1+=cf::InputDataFTeam::getPlayer();
я так понял это уже не будет работать вместе с этим
C++
1
basic_istream& operator>>(basic_istream& is, const Player& p)
?
avgoor
884 / 519 / 112
Регистрация: 05.12.2015
Сообщений: 1,464
18.04.2016, 20:41     Реализовать добавление переопределения операций или отношений #28
Максим_Воробьев, Именно в таком виде не будет. Нужен промежуточный объект.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.04.2016, 20:43     Реализовать добавление переопределения операций или отношений
Еще ссылки по теме:

Создать очередь из файла, совершение операций надо очередью(удаление элемента, добавление, запись в файл, вывод) - C++
Друзья, завтра сдать курсач, неделю парился с кодом. В итоге ничего дельного не вышло. Обращаюсь к вам, умельцы, за скорой помощью. Итак...

Реализовать структуру данных, которая имеет все те же операции, что массив длины n. Сложность операций - C++
Реализовать структуру данных, которая имеет все те же операции, что массив длины n, а именно начать работу ...

Ошибка переопределения - C++
В заголовочном файле проявились следующие ошибки. Что необходимо исправить? ...

Списки: ошибка переопределения - C++
ошибки переопределения, там где комментарии (строки 26 43 44) помогите исправить, пожауйста #include&lt;iostream&gt; using namespace...

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


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

Или воспользуйтесь поиском по форуму:
Максим_Воробьев
1 / 1 / 0
Регистрация: 29.03.2016
Сообщений: 51
18.04.2016, 20:43  [ТС]     Реализовать добавление переопределения операций или отношений #29
avgoor, А можно тогда если я внесу первые изменения что еще можно переопределить не подскажите только что-нибудь попроще пожалуйста.
Yandex
Объявления
18.04.2016, 20:43     Реализовать добавление переопределения операций или отношений
Ответ Создать тему
Опции темы

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