Лабораторная работа №11. Наследование, виртуальные методы
{
0.75 балла} [Класс:LinePrinter] Определите классLinePrinter— «принтер длинных строк» — с единственным методомvoid Print(string line).Метод печати
void Print(string line)должен печатать строкуline(не содержит переходов на новую строку, это можно не проверять) следующим образом:lineразбивается на набор строк по N символов в каждой строке; каждая строка длины N выводится на консоль в отдельной строке; последняя строка набора может содержать меньше N символов, если длинаlineне кратна N.
Замечание. Выводить строки посимвольно запрещается, используйте подходящие методы классаstring!Конструктор класса должен принимать N > 0 — максимальное число символов в печатаемой строке.
Пример:
Исходная строка: 'Meantime we shall express our darker purpose.' Печать принтером для N = 11: Meantime we shall expr ess our dar ker purpose . Печать принтером для N = 5: Meant ime w e sha ll ex press our darke r pur pose.Демонстрация. Проверьте работу принтера в основной программе. Проверьте принтер с параметром N = 1.
{
1.75 балла} [Класс:NumberedLinePrinter] Определите классNumberedLinePrinter, который действует аналогичноLinePrinter, но выводит номера печатаемых строк.
Указание. Используйте наследование.Пример:
Исходная строка: "Meantime we shall express our darker purpose." Печать принтером для N = 8: 1. Meantime 2. we shal 3. l expres 4. s our da 5. rker pur 6. pose.Демонстрация. Проверьте работу принтера в основной программе.
{
2.75 балла} [Класс:HidingLinePrinter] Определите класс принтера строкиHidingLinePrinter, который кроме N принимает ещё один параметр — строку символовhiddenChars. Этот принтер печатает строку аналогичноNumberedLinePrinter, но все символы из массиваhiddenCharsзаменяет звёздочками.Пример:
Исходная строка: "Meantime we shall express our darker purpose." Печать принтером для N = 8, hiddenChars = "eoapt": 1. M**n*im* 2. w* sh*l 3. l *x*r*s 4. s *ur d* 5. rk*r *ur 6. **s*.Демонстрация. Проверьте работу принтера в основной программе.
{
3.25 балла}Cоздать коллекцию List<LinePrinter> объектов-принтеров, которая содержит все три вида принтеров. С помощью каждого принтера из этой коллекции распечатайте одну и ту же строку.
Указание Чтобы заставить нашу программу использовать Print того класса принтера, к которому каждый объект-принтер из коллекции относится на самом деле (на этапе выполнения программы), необходимо «активировать» для метода Print позднее связывание. Для этого в базовом классе Print нужно объявить виртуальным с помощью ключевого слова
virtual, а при переопределении метода в классе-потомке следует указать ключевое словоoverride.{
4 балла} Добавьте в классLinePrinterдва метода:- процедуру
FancyPrint, который принимает вектор (или любую другую коллекцию) строк (строки не содержат символов перехода на новую строку, это можно не проверять). protected-функциюPadFancy, которая принимает строкуlineи натуральное число N > 0, и возвращает строку, которая представляет собойline, возможно дополненную символами решётки (#) до длины N (если длинаline< N).
Метод
FancyPrintдолжен печатать строки массива, преобразованные с помощьюPadFancy, где в качестве N берётся длина самой длинной строки массива.Сделайте так, чтобы
FancyPrintклассаHidingLinePrinterдополнял строки вектора не решётками, а случайной последовательностью цифр.Указание. Переопределять метод
FancyPrintзапрещается.- процедуру
Демонстрация. Вызовите FancyPrint для каждого принтера из коллекции
Дополнительные задачи
Реализуйте класс принтера, который выводит строки с указанием номеров строк, но предварительно выводит информацию об общем количестве строк для вывода.