14.04.2016, 19:18
|
#1
|
Регистрация: 14.04.2016
Сообщений: 4
|
реализовать добавление переопределения операций или отношений
Форумчане помогите реализовать в этой программке добавление переопределения операций или отношений.
Цитата:
#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::getPlay er());
ft1.add(cf::InputDataFTeam::getPlay er());
ft1.add(cf::InputDataFTeam::getPlay er());
ft2.add(cf::InputDataFTeam::getPlay er());
ft2.add(cf::InputDataFTeam::getPlay er());
ft2.add(cf::InputDataFTeam::getPlay er());
ft3.add(cf::InputDataFTeam::getPlay er());
ft3.add(cf::InputDataFTeam::getPlay er());
ft3.add(cf::InputDataFTeam::getPlay er());
//добавляем команды менеджеру
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;
}
|
Работа операций должна отображаться на мониторе
|
|
|