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

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

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

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

15.04.2016, 13:09. Просмотров 510. Ответов 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 минут
Буду очень благодарен если кто-нибудь поможет
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.04.2016, 13:09
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Реализовать добавление переопределения операций или отношений (C++):

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

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

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

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

Реализовать пользовательский класс "Двунаправленный список"; реализовать добавление и удаление элементов - C++
Записи в линейном списке содержат ключевое поле типа *char(строка символов). Сформировать двунаправленный список. Удалить К элементов с...

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

28
avgoor
915 / 550 / 119
Регистрация: 05.12.2015
Сообщений: 1,531
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 / 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 минут
...
0
avgoor
915 / 550 / 119
Регистрация: 05.12.2015
Сообщений: 1,531
16.04.2016, 11:54 #4
Цитата Сообщение от Максим_Воробьев Посмотреть сообщение
А еще можно в программке в другом месте как то что-то по другому переопределить
Например, вместо class InputDataFTeam определите:
C++
1
basic_istream& operator>>(basic_istream& is, const Player& p)
0
Максим_Воробьев
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)
как это выглядит
0
avgoor
915 / 550 / 119
Регистрация: 05.12.2015
Сообщений: 1,531
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;
}
0
Максим_Воробьев
1 / 1 / 0
Регистрация: 29.03.2016
Сообщений: 51
16.04.2016, 21:23  [ТС] #7
avgoor, Ммм... все равно что -то не пойму. Что в классе InputDataFTeam вы заменяете.
0
avgoor
915 / 550 / 119
Регистрация: 05.12.2015
Сообщений: 1,531
16.04.2016, 21:40 #8
Цитата Сообщение от Максим_Воробьев Посмотреть сообщение
Что в классе InputDataFTeam
Я выкидываю его. operator>> объявляется вне пространства имен и вне класса.
0
Максим_Воробьев
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);
            }
?
0
avgoor
915 / 550 / 119
Регистрация: 05.12.2015
Сообщений: 1,531
17.04.2016, 00:03 #10
Максим_Воробьев, Я заменяю getPlayer(). getFTeam на operator>>(basic_istream&, Team&) замените по аналогии.
0
Максим_Воробьев
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 минуты
...
0
avgoor
915 / 550 / 119
Регистрация: 05.12.2015
Сообщений: 1,531
18.04.2016, 12:21 #12
Цитата Сообщение от Максим_Воробьев Посмотреть сообщение
Чет у меня никак не получается заменить
Что конкретно не получается?
0
Максим_Воробьев
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);
            }
0
avgoor
915 / 550 / 119
Регистрация: 05.12.2015
Сообщений: 1,531
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;
}
0
Максим_Воробьев
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);
            }
?
0
18.04.2016, 13:12
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.04.2016, 13:12
Привет! Вот еще темы с ответами:

Реализовать класс "Список"; реализовать добавление и удаление элементов - C++
помогите написать код по спискам. надо создать линейный односвязный (двухсвязный) список. Из списка удалить элементы, стоящие между...

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

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

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


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

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