Кент Рейсдорф. BORLAND C++BUILDER. Раздел 1

Кент Рейсдорф. BORLAND C++BUILDER. Страница 87

Давайте рассмотрим в качестве примера класс Airplane. Как вы знаете, между гражданской и военной авиацией существуют большие различия. Для представления военного самолета я создам новый класс на основе класса Airplane, добавив к нему новые члены:

MilitaryPlane включает в себя все, что содержит Airplane, а также не­сколько дополнительных элементов. Обратите внимание на первую строку определения класса. Двоеточие после имени класса указывает компилятору, что данный класс является производным от другого класса. За двоеточием следует имя базового класса. Ключевое слово public в данном контексте оз­начает, что я хочу получить доступ ко всем открытым функциям и данным базового класса.

Вы должны были заметить, что в разделе private присутствует строка с объявлением переменной класса Mission. Класс Mission инкапсулирует все, что связано с боевым заданием: цель, навигационные опорные точки, высоты и курсы входа и выхода, и т.д. Таким образом, члены-данные могут быть экземплярами другого класса. Все это вы встретите в большом количестве при программировании в C++Builder.

Есть еще кое-что, о чем я пока не рассказывал. Обратите внимание на ключевое слово virtual. Оно указывает, что данная функция является вир­туальной.

Виртуальная функция (virtual function) — это функция, которая будет автоматически вызываться, если в производном классе сущест­вует функция с таким же именем.

Например, функция TakeOff() в классе Airplane объявлена виртуальной. Вернитесь к листингу 4.2. TakeOff() вызывается функцией SendMessage() в ответ на команду MSG_TAKEOFF. Если класс MilitaryPlane не содержит собственной функции TakeOffQ, будет вызвана функция из базового класса. Но поскольку эта функция на самом деле присутствует в классе MilitaryPlane, она будет вызываться вместо соответствующей функции базового класса.

Web-дизайн (с) 2010 All rights reserved