- •Лабораторная работа 2. Разветвляющиеся вычислительные процессы
- •Лабораторная работа 3. Организация циклов
- •Лабораторная работа 4. Простейшие классы
- •Лабораторная работа 5. Одномерные массивы
- •Лабораторная работа 6. Двумерные массивы
- •Лабораторная работа 7. Строки
- •Лабораторная работа 8. Классы и операции
- •Лабораторная работа 9. Наследование
- •Лабораторная работа 10. Структуры
Лабораторная работа 9. Наследование
Теоретический материал: глава 8.
В программах требуется описать базовый класс (возможно, абстрактный), в котором с помощью виртуальных или абстрактных методов и свойств задается интерфейс для производных классов. Целью лабораторной работы является максимальное использование наследования, даже если для конкретной задачи оно не дает выигрыша в объеме программы. Во всех классах следует переопределить метод Equals, чтобы обеспечить сравнение значений, а не ссылок.
Функция Main должна содержать массив из элементов базового класса, заполненный ссылками на производные классы. В этой функции должно демонстрироваться использование всех разработанных элементов классов.
Вариант 1
Создать класс Point (точка). На его основе создать классы ColoredPoint и Line (линия). На основе класса Line создать классы ColoredLine и PolyLine (многоугольник). В классах описать следующие элементы:
конструкторы с параметрами и конструкторы по умолчанию;
свойства для установки и получения значений всех координат, а также для изменения цвета и получения текущего цвета;
для линий — методы изменения угла поворота линий относительно первой точки;
для многоугольника — метод масштабирования.
Вариант 2
Создать абстрактный класс Vehicle (транспортное средство). На его основе реализовать классы Plane (самолет), Саr (автомобиль) и Ship (корабль). Классы должны иметь возможность задавать и получать координаты и параметры средств передвижения (цена, скорость, год выпуска и т. п.) с помощью свойств. Для самолета должна быть определена высота, для самолета и корабля — количество пассажиров, для корабля — порт приписки. Динамические характеристики задать с помощью методов.
Вариант 3
Описать базовый класс Строка. Обязательные поля класса:
поле для хранения символов строки;
значение типа word для хранения длины строки в байтах. Реализовать обязательные методы следующего назначения:
конструктор без параметров;
конструктор, принимающий в качестве параметра строковый литерал;
конструктор, принимающий в качестве параметра символ;
метод получения длины строки;
метод очистки строки (сделать строку пустой).
Описать производный от Строка класс Комплексное_число.
Строки данного класса состоят из двух полей, разделенных символом i.
Первое поле задает значение действительной части числа, второе — значение мнимой. Каждое из полей может содержать только символы десятичных цифр и символы – и +, задающие знак числа. Символы – или + могут находиться только в первой позиции числа, причем символ + может отсутствовать, в этом случае число считается положительным. Если в составе инициализирующей строки будут встречены любые символы, отличные от допустимых, класс Комплексное_число принимает нулевое значение. Примеры строк:
33i12
–7i100
+5i–21
Для класса Комплексное_число определить следующие методы:
проверка на равенство;
сложение чисел;
умножение чисел.
Вариант 4
Описать базовый класс Строка в соответствии с вариантом 3. Описать производный от Строка класс Десятичная_строка.
Строки данного класса могут содержать только символы десятичных цифр и символы – и +, задающие знак числа. Символы – или + могут находиться только в первой позиции числа, причем символ + может отсутствовать, в этом случае число считается положительным. Если в составе инициализирующей строки будут встречены любые символы, отличные от допустимых, класс Десятичная строка принимает нулевое значение. Содержимое данных строк рассматривается как десятичное число.
Для класса определить следующие методы:
конструктор, принимающий в качестве параметра число;
арифметическая разность строк;
проверка на больше (по значению);
проверка на меньше (по значению).
Вариант 5
Описать базовый класс Строка в соответствии с вариантом 3. Описать производный от Строка класс Битовая_строка.
Строки данного класса могут содержать только символы ' 0' или ' 1'. Если в составе инициализирующей строки будут встречены любые символы, отличные от допустимых, класс Битовая_строка принимает нулевое значение. Содержимое данных строк рассматривается как двоичное число. Отрицательные числа хранятся в дополнительном коде.
Для класса Битовая_строка определить следующие методы:
конструктор, принимающий в качестве параметра строковый литерал;
деструктор;
изменение знака на противоположный (перевод числа в дополнительный код);
присваивание;
вычисление арифметической суммы строк;
проверка на равенство.
В случае необходимости более короткая битовая строка расширяется влево знаковым разрядом.
Варианты 6…25
Описать базовый класс Элемент. Закрытые поля:
имя элемента (строка символов);
количество входов элемента;
количество выходов элемента.
Методы:
конструктор класса без параметров;
конструктор, задающий имя и устанавливающий равным 1 количество входов и выходов;
конструктор, задающий значения всех полей элемента.
Свойства:
имя элемента (только чтение);
количество входов элемента;
количество выходов элемента.
На основе класса Элемент описать производный класс Комбинационный, представляющий собой комбинационный элемент (двоичный вентиль), который может иметь несколько входов и один выход.
Поле — массив значений входов.
Методы:
конструкторы;
метод, задающий значение на входах экземпляра класса;
метод, позволяющий опрашивать состояние отдельного входа экземпляра класса;
метод, вычисляющий значение выхода (по варианту задания).
На основе класса Элемент описать производный класс Память, представляющий собой триггер. Триггер имеет входы, соответствующие типу триггера (см. далее вариант задания), и входы установки и сброса. Все триггеры считаются синхронными, сам синхровход в состав триггера не включается.
Поля:
массив значений входов объекта класса, в массиве учитываются все входы (управляющие и информационные);
состояние на прямом выходе триггера;
состояние на инверсном выходе триггера.
Методы:
конструктор (по умолчанию сбрасывает экземпляр класса);
конструктор копирования;
метод, задающий значение на входах экземпляра класса;
методы, позволяющие опрашивать состояния отдельного входа экземпляра класса;
метод, вычисляющий состояние экземпляра класса (по варианту задания) в зависимости от текущего состояния и значений на входах;
метод, переопределяющий операцию == для экземпляров класса.
Создать класс Регистр, используя класс Память как вложенный класс. Поля:
состояние входа «Сброс» — один для экземпляра класса;
состояние входа «Установка» — один для экземпляра класса;
массив типа Память заданной в варианте размерности;
массив (массивы), содержащий значения на соответствующих входах элементов массива типа Память.
Методы:
метод, задающий значение на входах экземпляра класса;
метод, позволяющий опрашивать состояние отдельного выхода экземпляра класса;
метод, вычисляющий значение нового состояния экземпляра класса.
Все поля классов Элемент, Комбинационный и Память должны быть описаны с ключевым словом private.
В задании перечислены только обязательные члены и методы класса. Можно задавать дополнительные члены и методы, если они не отменяют обязательные и обеспечивают дополнительные удобства при работе с данными классами, например, описать функции вычисления выхода/состояния как виртуальные.
Для проверки функционирования созданных классов написать программу, использующую эти классы. В программе должны быть продемонстрированы все свойства созданных классов.
Конкретный тип комбинационного элемента, тип триггера и разрядность регистра выбираются в соответствии с вариантом задания:
Вариант |
Комбинационный элемент |
Число входов |
Триггер |
Разрядность регистра |
6 |
И-НЕ |
4 |
RS |
8 |
7 |
ИЛИ |
5 |
RST |
10 |
8 |
МОД2-НЕ |
6 |
D |
12 |
9 |
И |
8 |
Т |
8 |
10 |
ИЛИ-НЕ |
8 |
V |
9 |
И |
И |
4 |
RS |
10 |
12 |
ИЛИ-НЕ |
5 |
JK |
11 |
13 |
МОД 2 |
5 |
D |
8 |
14 |
И |
4 |
Т |
10 |
15 |
ИЛИ |
3 |
JK |
8 |
16 |
И-НЕ |
3 |
RS |
12 |
17 |
ИЛИ-НЕ |
4 |
RST |
4 |
18 |
МОД2 |
5 |
D |
10 |
19 |
МОД2-НЕ |
6 |
Т |
10 |
20 |
ИЛИ-НЕ |
8 |
V |
10 |
21 |
И |
8 |
JK |
6 |
22 |
И-НЕ |
8 |
RS |
10 |
23 |
ИЛИ |
8 |
Т |
10 |
24 |
МОД2 |
6 |
JK |
8 |
25 |
МОД2-НЕ |
5 |
V |
10 |