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

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

Замена функции базового класса функцией производного класса на­зывается замещением (overriding) функции.

Чтобы произошло замещение, функция производного класса должна в точности совпадать с функцией базового класса. Иными словами, типы воз­вращаемых значений, имена функций и списки параметров должны быть одинаковыми.

Вы можете использовать замещение для изменения функции базового класса или ее расширения. Рассмотрим, например, функцию TakeOff(). Если вы хотите полностью изменить работу функции TakeOff() класса Airplane, определите в классе MilitaryPlane следующую функцию:

void MilitaryPlane::TakeOff(int dir) {

// новый код

}

Но если вы хотите, чтобы ваша функция дополнительно сохранила все возможности функции базового класса, вызовите сначала прежнюю функцию:

void MilitaryPlane::TakeOff(int dir) {

Airplane::TakeOff(dir) ; // новый код

Для расширения возможностей функции базового класса, вы можете доба­вить соответствующий код до или после ее вызова. Оператор разрешения ви­димости используется для указания компилятору, что вызывается функция TakeOff() класса Airplane. Заметьте, что функция TakeOffQ объявлена в раз­деле protected класса Airplane. Если бы она находилась в разделе private, этот вызов был бы невозможен, т.к. даже производные классы не имеют доступа к закрытым членам класса-предка. Делая функцию TakeOff() защищенной, вы скрываете ее от внешнего мира, но оставляете доступной для производных классов.

Когда вы создаете класс на основе другого класса, необходимо правильно инициализировать базовый класс путем вызова соответствующего конструк­тора. Конструктор базового класса вызывается в списке инициализаторов. Вот как это будет выглядеть для класса Military Plane:

MilitaryPlane::MilitaryPlane(char* _name)

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