Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Медведев_С++_CLI_C#_Java_J#.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
5.17 Mб
Скачать

If(d.GetDel())

{

System.out.println ("d.getDel()= true");

System.out.println ("del" + d.getDel());

aL_small.remove ((SmallBall)d.getObject());

>

else repaint ();

>

}

public static vold maln ( )

{

Wind w= new Wlnd ( );

13. Ещё о важном в объектно-ориентирован-

ном программировании на С++, C# и J#

(Java)

Освоение ранее изложенных разделов об объектно-ориентированном

программировании с многочисленными примерами программ позволит раз-

рабатывать разнообразные много объектные и многопоточные консольные и

Windows программы с использованием разделяемых ресурсов и интерфейс-

ных управляющих элементов, несмотря на то, что ряд вопросов были опуще-

ны или затронуты поверхностно. Ведь книга затрагивает только основы объ-

ектно-ориентированного программирования и особенности его применитель-

но к языкам С++, C++/CLI, C# и Java. Надеюсь, что полученные знания сти-

мулируют читателя к самостоятельному изучению иных особенностей этих

языков и более глубокому освоению объектно-ориентированного програм-

мирования. В завершающем разделе книги рассмотрим такие важнейшие

понятия объектно-ориентированного программирования как виртуальные

функции, абстрактные функции и абстрактные классы, знание которых по-

зволит разрабатывать программы на более высоком абстрактном уровне.

13.1. Виртуальные функции

Виртуальные функции (virtual functions) уже применялись в примерах

приведённых программ, в которых наследовались базовые классы Form,

Frame. В соответствии с правилами виртуальных функций требовалось при-

менять ключевые слова virtual, override. Что и делалось, иначе компилятор

укажет ошибку.

C#. Например, удалите в порождённом классе слово override в заголов-

ке виртуальной функции OnPaint():

protected override vold OnPaint (PaintEventArgs arg)

и компилятор сделает предупреждение, что в этом случае данная функция

OnPaint() не переопределяет наследуемую виртуальную функцию OnPaint(),

которая является обработчиком события Paint. Компилятор сообщает, что те-

перь эта функция должна считаться иной функцией и должна помечаться уже

ключевым словом new. Запустив программу без требуемого слова override,

можно убедиться, что наша функция OnPaint() будет выполняться иначе, не

отображая в окне описанное в данной функции.

Механизм виртуальных функций позволяет в иерархию наследования

классов ввести особые функции - виртуальные функции, которые, будучи

определёнными в базовом классе, могут применяться в объектах наследуе-

мьа классах, а при необходимости и переопределяться, а в объектах даль-

нейших наследуемых классов использоваться уже переопределёнными.

Функция OnPaint() была определена как виртуальная в наследуемом

нами классе Form и, как обработчик события Paint, она была подписана на

это событие. Эту функцию обычно переопределяют в порождённом классе,

поскольку по умолчанию она имеет пустое тело, как и большинство вирту-

альных функций. Свойство виртуальности подчеркивает то, что эта функция

особая и является, в данном случае, подписанным обработчиком. Ключевое

слово override сохраняет это свойство функции, подчеркивая, что переопре-

делённая функция является тем же самым обработчиком, но содержащим те-

перь иное тело. Она теперь перерисовывает окно в соответствии с нашими

пожеланиями.