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

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

Восстановить пароль Регистрация
 
 
Максим_Воробьев
1 / 1 / 0
Регистрация: 29.03.2016
Сообщений: 51
15.04.2016, 13:09     Реализовать добавление переопределения операций или отношений #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
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++
C++ Создать очередь из файла, совершение операций надо очередью(удаление элемента, добавление, запись в файл, вывод)
C++ Множественные переопределения сбивающие компилятор столку
C++ Реализовать класс Строка (String) для хранения и выполнения операций над строкой
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
avgoor
562 / 352 / 83
Регистрация: 05.12.2015
Сообщений: 1,137
15.04.2016, 17:40     Реализовать добавление переопределения операций или отношений #2
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Максим_Воробьев, Например вместо:
C++
1
2
3
4
class FTeam {
...
                void add(Player p){ // добавление игрока в команду
...
C++
1
2
3
4
5
6
class FTeam {
...
    FTeam& operator+=(const Player& p) {
        team.push_back(p);
    }
...
Вызывать соответственно:
C++
1
ft1+=cf::InputDataFTeam::getPlayer();
Максим_Воробьев
1 / 1 / 0
Регистрация: 29.03.2016
Сообщений: 51
16.04.2016, 10:24  [ТС]     Реализовать добавление переопределения операций или отношений #3
avgoor, То есть к примеру в классе
C++
1
2
 class FTeamManager {
void add(FTeam ft){ // добавление команды
это тоже можно так же заменить?

Добавлено через 2 минуты
avgoor, А еще можно в программке в другом месте как то что-то по другому переопределить?

Добавлено через 14 часов 59 минут
...
avgoor
562 / 352 / 83
Регистрация: 05.12.2015
Сообщений: 1,137
16.04.2016, 11:54     Реализовать добавление переопределения операций или отношений #4
Цитата Сообщение от Максим_Воробьев Посмотреть сообщение
А еще можно в программке в другом месте как то что-то по другому переопределить
Например, вместо class InputDataFTeam определите:
C++
1
basic_istream& operator>>(basic_istream& is, const Player& p)
Максим_Воробьев
1 / 1 / 0
Регистрация: 29.03.2016
Сообщений: 51
16.04.2016, 18:07  [ТС]     Реализовать добавление переопределения операций или отношений #5
avgoor, Можно еще раз уточнить вот это в коде должно быть вместе или одно заменяет другое?
C++
1
2
3
4
class FTeam {
...
* * * * * * * * void add(Player p){ // добавление игрока в команду
...
C++
1
2
3
4
5
6
class FTeam {
...
* * FTeam& operator+=(const Player& p) {
* * * * team.push_back(p);
* * }
...
Вызывать соответственно:

C++
1
ft1+=cf::InputDataFTeam::getPlayer();[/quote]
И не совсем понял
Цитата Сообщение от avgoor Посмотреть сообщение
Например, вместо class InputDataFTeam определите:
C++
1
basic_istream& operator>>(basic_istream& is, const Player& p)
как это выглядит
avgoor
562 / 352 / 83
Регистрация: 05.12.2015
Сообщений: 1,137
16.04.2016, 19:34     Реализовать добавление переопределения операций или отношений #6
Цитата Сообщение от Максим_Воробьев Посмотреть сообщение
как это выглядит
Как-то так:
C++
1
2
3
4
5
6
7
8
9
10
11
std::basic_istream<char>& operator>>(std::basic_istream<char>& in, cf::Player& p)
{
    std::getline(in, p.m_name);
    in >> p.m_bDay;
}
 
int main()
{
    Player p;
    std::cin>>p;
}
Максим_Воробьев
1 / 1 / 0
Регистрация: 29.03.2016
Сообщений: 51
16.04.2016, 21:23  [ТС]     Реализовать добавление переопределения операций или отношений #7
avgoor, Ммм... все равно что -то не пойму. Что в классе InputDataFTeam вы заменяете.
avgoor
562 / 352 / 83
Регистрация: 05.12.2015
Сообщений: 1,137
16.04.2016, 21:40     Реализовать добавление переопределения операций или отношений #8
Цитата Сообщение от Максим_Воробьев Посмотреть сообщение
Что в классе InputDataFTeam
Я выкидываю его. operator>> объявляется вне пространства имен и вне класса.
Максим_Воробьев
1 / 1 / 0
Регистрация: 29.03.2016
Сообщений: 51
16.04.2016, 23:30  [ТС]     Реализовать добавление переопределения операций или отношений #9
avgoor, То есть вы заменяете весь класс
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
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);
            }
?
avgoor
562 / 352 / 83
Регистрация: 05.12.2015
Сообщений: 1,137
17.04.2016, 00:03     Реализовать добавление переопределения операций или отношений #10
Максим_Воробьев, Я заменяю getPlayer(). getFTeam на operator>>(basic_istream&, Team&) замените по аналогии.
Максим_Воробьев
1 / 1 / 0
Регистрация: 29.03.2016
Сообщений: 51
18.04.2016, 12:08  [ТС]     Реализовать добавление переопределения операций или отношений #11
avgoor, Так то есть вместо этого
C++
1
2
3
4
5
6
7
8
9
10
11
12
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);
            }
Заменяется так правильно?
C++
1
2
3
4
5
6
7
8
9
10
std::basic_istream<char>& operator>>(std::basic_istream<char>& in, cf::Player& p)
{
    std::getline(in, p.m_name);
    in >> p.m_bDay;
             std::cout << "input name palyer : "; getline(std::cin, name);
             std::cout << "input birthday player : "; std::cin >> bDay;
             std::cin.get();
                
             return Player(name, bDay);
            }
а вот эта часть
C++
1
2
3
4
5
std::cout << "input name palyer : "; getline(std::cin, name);
                std::cout << "input birthday player : "; std::cin >> bDay;
                std::cin.get();
                
                return Player(name, bDay);
остается такой же или здесь тоже что - меняется?

Добавлено через 34 минуты
И что заменяется этим
C++
1
2
 Player p;
    std::cin>>p;
в
C++
1
int main()
Добавлено через 20 часов 53 минуты
Чет у меня никак не получается заменить

Добавлено через 2 часа 3 минуты
...
avgoor
562 / 352 / 83
Регистрация: 05.12.2015
Сообщений: 1,137
18.04.2016, 12:21     Реализовать добавление переопределения операций или отношений #12
Цитата Сообщение от Максим_Воробьев Посмотреть сообщение
Чет у меня никак не получается заменить
Что конкретно не получается?
Максим_Воробьев
1 / 1 / 0
Регистрация: 29.03.2016
Сообщений: 51
18.04.2016, 12:27  [ТС]     Реализовать добавление переопределения операций или отношений #13
avgoor, Никак не соображу как вставить. Вот я правильно вставил ?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
class InputDataFTeam{ 
        public:
            
            std::basic_istream<char>& operator>>(std::basic_istream<char>& in, cf::Player& p) {
                std::getline(in, p.m_name);
                in >> p.m_bDay;
                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);
            }
avgoor
562 / 352 / 83
Регистрация: 05.12.2015
Сообщений: 1,137
18.04.2016, 13:04     Реализовать добавление переопределения операций или отношений #14
Максим_Воробьев, Оператор извлечения из потока определяется ВНЕ класса.
Так же там не нужен вывод. (Он не нужен потому, что определив operator>> пофиг откуда им читать из cin, или из fstream)
Как-то так:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
class Player
{
...
};
 
std::basic_istream<char>& operator>>(std::basic_istream<char>& in, cf::Player& p)
{
    std::getline(in, p.m_name);
    in >> p.m_bDay;
}
 
int main()
{
    Player p;
    std::cout<<"Введите имя и год рождения";
    std::cin>>p;
}
Максим_Воробьев
1 / 1 / 0
Регистрация: 29.03.2016
Сообщений: 51
18.04.2016, 13:12  [ТС]     Реализовать добавление переопределения операций или отношений #15
avgoor, То есть я
C++
1
class InputDataFTeam
вообще не трогаю или там убирается вот эта часть
C++
1
2
3
4
5
6
7
8
9
10
            
            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);
            }
?
avgoor
562 / 352 / 83
Регистрация: 05.12.2015
Сообщений: 1,137
18.04.2016, 13:18     Реализовать добавление переопределения операций или отношений #16
Максим_Воробьев, class InputDataFTeam
выкидываете за ненадобностью, а вместо него определяете два operator>> для Player и Team. Причем внутри оператора чтения team читаете player через in>>p;
Максим_Воробьев
1 / 1 / 0
Регистрация: 29.03.2016
Сообщений: 51
18.04.2016, 13:37  [ТС]     Реализовать добавление переопределения операций или отношений #17
avgoor, Для Team получается аналогичный оператор?

Добавлено через 4 минуты
avgoor, И как я понял все это
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
    // создаем объекты команд с параметрами
    cf::FTeam ft1(cf::InputDataFTeam::getFTeam());
    cf::FTeam ft2(cf::InputDataFTeam::getFTeam());
    cf::FTeam ft3(cf::InputDataFTeam::getFTeam());
    
    //добавляем игроков в команды
    ft1+=cf::InputDataFTeam::getPlayer();
    ft1+=cf::InputDataFTeam::getPlayer();
    ft1+=cf::InputDataFTeam::getPlayer();
 
    ft2+=cf::InputDataFTeam::getPlayer();
    ft2+=cf::InputDataFTeam::getPlayer();
    ft2+=cf::InputDataFTeam::getPlayer();
    
    ft3+=cf::InputDataFTeam::getPlayer();
    ft3+=cf::InputDataFTeam::getPlayer();
    ft3+=cf::InputDataFTeam::getPlayer();
    
    //добавляем команды менеджеру 
    ftm+=(ft1);
    ftm+=(ft2);
    ftm+=(ft3);
убирается из int main да?
avgoor
562 / 352 / 83
Регистрация: 05.12.2015
Сообщений: 1,137
18.04.2016, 14:17     Реализовать добавление переопределения операций или отношений #18
Максим_Воробьев, Типа того.
В main будет:
C++
1
2
cf::FTeam ft1;
std::cin>>ft1;
Добавлено через 10 минут
Аналогично вместо print() определяете:
C++
1
2
3
4
std::basic_ostream<char>& operator<<(std::basic_ostream<char>& in, const cf::Player& p);
 
//если где-то определен cf::Player pl1; выводим его так:
std::cout<<pl1;
Максим_Воробьев
1 / 1 / 0
Регистрация: 29.03.2016
Сообщений: 51
18.04.2016, 14:55  [ТС]     Реализовать добавление переопределения операций или отношений #19
avgoor, Ммм... Простите не могли бы вы все это вставить в программку у мня чет не выходит ну это скорее всего из-за не опытности, ни как не соображу.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.04.2016, 15:10     Реализовать добавление переопределения операций или отношений
Еще ссылки по теме:

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

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

Или воспользуйтесь поиском по форуму:
avgoor
562 / 352 / 83
Регистрация: 05.12.2015
Сообщений: 1,137
18.04.2016, 15:10     Реализовать добавление переопределения операций или отношений #20
Цитата Сообщение от Максим_Воробьев Посмотреть сообщение
всего из-за не опытности
Опыт - дело наживное. Вот и "наживайте" его.
Yandex
Объявления
18.04.2016, 15:10     Реализовать добавление переопределения операций или отношений
Ответ Создать тему
Опции темы

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