Обработка событий. Виртуальные функции и абстрактные классы
Автор: kostaqw • Февраль 27, 2022 • Лабораторная работа • 7,587 Слов (31 Страниц) • 258 Просмотры
ФЕДЕРАЛЬНОЕ АГЕНТСТВО СВЯЗИ
ФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ БЮДЖЕТНОЕ
ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ ВЫСШЕГО ОБРАЗОВАНИЯ
«САНКТ-ПЕТЕРБУРГСКИЙ
ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ ТЕЛЕКОММУНИКАЦИЙ
им. проф. М.А. Бонч-Бруевича»
(СПбГУТ)
Санкт-Петербургский колледж телекоммуникаций
Отчет по лабораторной работе № 14
Обработка событий. Виртуальные функции и абстрактные классы
Выполнили: Обучающиеся 2 курса, группы КЗФ-95,
Чистяков Константин Вячеславович
Проверил: преподаватель Баталов Дмитрий Иннокентиевич
Санкт-Петербург
2020г.
Цель работы
1) Получить навык создания классов с использованием принципа наследования и реализации полиморфного поведения классов.
Выполнение работы
Задание: Определить класс «Шахматная фигура» и унаследовать от него классы, соответствующие шахматным фигурам «Ферзь», «Король», «Ладья», «Пешка», «Конь», «Слон». Задать позицию на доске и определить, не стоит ли мат одному из королей.
Описание классов.
UML диаграмма
[pic 1]
Листинг программы:
class figure
{
public:
int x;
int y;
string name;
//конструктор
figure(int x, int y, string name)
{
this->x = x;
this->y = y;
this->name = name;
}
//метод вывода фигуры
void show()
{
cout << convert(x, y) + "_" + name;
}
// метод для конвертации позиции фигуры в нормальный формат
private:
string convert(int x, int y)
{
char symb;
switch (x)
{
case 0: {symb = 'a'; break; }
case 1: {symb = 'b';break; }
case 2: {symb = 'c';break; }
case 3: {symb = 'd';break; }
case 4: {symb = 'e'; break; }
case 5: {symb = 'f'; break; }
case 6: {symb = 'g'; break; }
case 7: {symb = 'h'; break; }
default: {symb = 'q'; break; }
}
string result = symb + to_string(y);
return result;
}
};
class Pawn : public figure
{
public:
Pawn(int x, int y, string desk[8][8], string canBite[8][8]) : figure(x, y, "P")
{
//Присваимаем имя и размещаем на доске
desk[x][y] = 'P';
// помечаем клетки которые может бить фигуры, заполняя полученный массив
if ((x < 8) && (y < 8))
{
if (y == 0)
{
canBite[x - 1][y + 1] = "+";
...