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

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

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

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

15.04.2016, 13:09. Просмотров 483. Ответов 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++
Кроме того, необходимо реализовать перегрузку операций сложения, вычитания, скалярного и векторного произведения. Я читал про...

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

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

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

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

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

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
avgoor
885 / 520 / 112
Регистрация: 05.12.2015
Сообщений: 1,465
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
885 / 520 / 112
Регистрация: 05.12.2015
Сообщений: 1,465
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, Ммм... Простите не могли бы вы все это вставить в программку у мня чет не выходит ну это скорее всего из-за не опытности, ни как не соображу.
avgoor
885 / 520 / 112
Регистрация: 05.12.2015
Сообщений: 1,465
18.04.2016, 15:10 #20
Цитата Сообщение от Максим_Воробьев Посмотреть сообщение
всего из-за не опытности
Опыт - дело наживное. Вот и "наживайте" его.
Максим_Воробьев
1 / 1 / 0
Регистрация: 29.03.2016
Сообщений: 51
18.04.2016, 15:51  [ТС] #21
avgoor, Мне бы для наглядности, а то я уже совсем запутался
avgoor
885 / 520 / 112
Регистрация: 05.12.2015
Сообщений: 1,465
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
885 / 520 / 112
Регистрация: 05.12.2015
Сообщений: 1,465
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
885 / 520 / 112
Регистрация: 05.12.2015
Сообщений: 1,465
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
885 / 520 / 112
Регистрация: 05.12.2015
Сообщений: 1,465
18.04.2016, 20:41 #28
Максим_Воробьев, Именно в таком виде не будет. Нужен промежуточный объект.
Максим_Воробьев
1 / 1 / 0
Регистрация: 29.03.2016
Сообщений: 51
18.04.2016, 20:43  [ТС] #29
avgoor, А можно тогда если я внесу первые изменения что еще можно переопределить не подскажите только что-нибудь попроще пожалуйста.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.04.2016, 20:43
Привет! Вот еще темы с ответами:

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
18.04.2016, 20:43
Ответ Создать тему
Опции темы

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