Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Сборник лабораторных работ C#.doc
Скачиваний:
88
Добавлен:
12.11.2019
Размер:
960 Кб
Скачать

Лабораторная работа 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