0 / 0 / 0
Регистрация: 27.11.2017
Сообщений: 30
1

Определить класс «Шахматная фигура» и унаследовать от него классы, соответствующие шахматным фигурам

19.12.2017, 22:43. Показов 2561. Ответов 1

Здравствуйте.

Помогите реализовать алгоритм решения задачи. Определить класс «Шахматная фигура» и унаследовать от него классы, соответствующие шахматным фигурам «Ферзь», «Пешка», «Конь». Задать позицию и определить список фигур, которые может убить некоторая выбранная фигура.

(Виртуальные функции)

Заранее спасибо за помощь.
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
19.12.2017, 22:43
Ответы с готовыми решениями:

Определить класс «Шахматная фигура» и производные классы
Лабораторная работа по ОП. Если кто может помогите с кодом. Условие таково: "Определить класс...

Определить класс «Шахматная фигура» и производные классы «Ферзь»
Дело в том, что начал изучать ООП не так давно и тут попалась задачка, которая заинтересовала....

Создать иерархию классов Шахматная фигура – абстрактный класс, содержащий поле – цвет. Создать производные классы
Создать иерархию классов Шахматная фигура – абстрактный класс, содержащий поле – цвет. Создать...

Дан абстрактный класс «Геометрическая фигура», внутри него определить абстрактные и (или) виртуальные методы
Здравствуйте, помогите пожалуйста с данной задачей: Дан абстрактный класс «Геометрическая фигура»,...

1
34 / 34 / 37
Регистрация: 21.06.2012
Сообщений: 152
20.12.2017, 02:07 2
Лучший ответ Сообщение было отмечено FeelsRainMan как решение

Решение

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
#include <iostream>
#include <memory>
#include <set>
#include <string>
 
class Figure
{
public:
    Figure(unsigned int x, unsigned int y) : x_pos(x), y_pos(y) {}
    virtual ~Figure() {}
    virtual bool can_take(std::shared_ptr<Figure> figure) const = 0;
    virtual std::string name() const = 0;
 
    int x() const
    {
        return x_pos;
    }
    int y() const
    {
        return y_pos;
    }
private:
    unsigned int x_pos,
               y_pos;
};
 
class Queen : public Figure
{
public:
    Queen(unsigned int x, unsigned int y) : Figure(x, y) {}
    virtual ~Queen() {}
    virtual bool can_take(std::shared_ptr<Figure> figure) const
    {
        if (x() == figure->x())
            return true;
        if (y() == figure->y())
            return true;
        if (std::abs(x() - figure->x()) == std::abs(y() - figure->y()))
            return true;
        return false;
    }
    virtual std::string name() const
    {
        return "Queen";
    }
};
 
class Pawn : public Figure
{
public:
    Pawn(unsigned int x, unsigned int y) : Figure(x, y) {}
    virtual ~Pawn() {}
    virtual bool can_take(std::shared_ptr<Figure> figure) const
    {
        return y() == figure->y() && std::abs(figure->x() - x()) == 1;
    }
    virtual std::string name() const
    {
        return "Pawn";
    }
};
 
class Horse : public Figure
{
public:
    Horse(unsigned int x, unsigned int y) : Figure(x, y) {}
    virtual ~Horse() {}
    virtual bool can_take(std::shared_ptr<Figure> figure) const
    {
        return (std::abs(y() - figure->y()) == 2 && std::abs(figure->x() - x()) == 1) ||
              (std::abs(y() - figure->y()) == 1 && std::abs(figure->x() - x()) == 2);
    }
    virtual std::string name() const
    {
        return "Horse";
    }
};
 
int main()
{
    std::set<std::shared_ptr<Figure>> set({
                                 std::make_shared<Pawn>(2, 2),
                                 std::make_shared<Horse>(0, 1),
                                 std::make_shared<Queen>(2, 0)
                                 });
    for (auto fst : set)
        for (auto snd : set)
            if(fst.get() != snd.get())
                std::cout << fst->name() << " can"
                          << (fst->can_take(snd) ? " " : "'t ")
                          << "take " << snd->name()
                          << std::endl;
 
    return 0;
}
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
20.12.2017, 02:07

Дан абстрактный класс «Геометрическая фигура», внутри него определить абстрактные и (или) виртуальные методы
Дан абстрактный класс «Геометрическая фигура», внутри него определить абстрактные и (или)...

Создать класс Машина и унаследовать от него Грузовик
Создать класс Машина, содержащий в качестве параметров марку(строка), число цилиндров, мощность....

Создать класс Машина и унаследовать от него Грузовик
помогите пожалуйста, напишите полный код. Буду очень благодарен! Перепечатывайте задание на...

Определить сможет ли шахматная фигура съесть пешку по ее координатам
Помогите пожалуйста. Задачу не принимает. Пишет, что неправильный ответ на каком-то тесте. ...


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

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

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