Наследование

Наследованием называют конструирование новых более сложных производных классов из уже имеющихся базовых посредством добавления полей и методов.

При наследовании объекты кпасса-потомка получают возможность использования («наследуют») поля и методы кпасса-родителя, что позволяет повторно не определять эти компоненты класса.

При описании кпасса-потомка указывают класс-родитель и дополнительные, определенные только для класса-потомка, поля и методы:

Туре = object()

end;...

Пример 11.1. Разработать класс для реализации объекта Трехмерная комната, который должен реагировать на запрос о площади и объеме комнаты (рис. 11.1).

В параграфе 10.3 уже был определен класс TRoom в модуле Room, который содержал поля для хранения длины и ширины ком
наты, метод инициализации полей и метод определения площади. Построим класс для реализации объекта Трехмерная комната на базе TRoom, добавив поле для хранения высоты комнаты и метод определения объема комнаты V, который обращается к методу Square родительского класса (рис. 11.2). Класс TRoom также должен включать свой метод инициализации объектов для инициализации нового поля height.

Разрабатываемая программа должна содержать указание об использовании модуля Room, в котором описан родительский класс TRoom:

Program ex;

Uses Room;

Type TVRoom = object(TRoom)

heighUreal; {поле для хранения высоты}

function V:real; {метод определения объема}

procedure Newlnit(l,w,h:real); {инициализирующий метод} end;

Procedure TVRoom.NewInit;

Begin

Init(l,w); {инициализируем наследуемые поля класса} height:=h; {инициализируем собственное поле класса}

End;

Function TVRoom. V;

Begin

V: =Square * height; {обращаемся к методу базового класса}

End:

Var А:TVRoom;

Begin

A.NewInit(3.4,5.1,2.8);

WriteLn(‘Площадь комнаты =

A.Square:6:2);

WriteLn(‘06beM комнаты = A. V:6:2);

End.

Класс TVRoom, таким образом, включает три поля: length, width и height (рис. 11.3) и четыре метода: Square, Init, Newlnit и V. Все поля и методы доступны как из методов производного класса, так и непосредственно из программы.

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

Примечание. По правилам Borland Pascal у класса может быть только один родитель, но сколько угодно потомков. Поскольку каждый производный класс добавляет при наследовании свои поля и методы, в иерархии классов по мере удаления от корня дерева иерархии сложность классов и соответственно объектов, которые эти классы реализуют, возрастает. Одновременно возрастает и специализация классов. Наиболее универсальные классы, таким образом, находятся у корня дерева классов.

Операция присваивания объектов родственных классов. В Borland Pascal допустимо присваивание объектам класса-родителя значений объектов класса-потомка. Обратное присваивание не разрешено, так как при его выполнении методом «поле за полем» собственные поля объекта класса-потомка окажутся не определенными.

Например:

Var A:TRoom;

B. TVRoom;...

А:-В; {допустимо}

В:-А;... {недопустимо: ошибка!}

Особенности работы с указателями на объекты родственных классов. По правилам Borland Pascal допустимо указателям на объекты класса- родителя присваивать адреса объектов класса-потомка. Однако при этом указатель на объект базового класса не обеспечивает возможности обращения к полям и методам, объявленным в производном классе (рис. 11.4).

Например:

Рис. 11.4. Обращение к полям класса потомка через указатель на объекты класса-родителя



Var рС: ATRoom; {указатель на объекты базового класса}

E. TVRoom;... {объект производного класса}

рС:= @Е; {присваиваем указателю на объекты базового класса адрес объекта производного класса}

рСл.height: =2.7; {ошибка, указатель на объекты типа класса-родите- ля не подозревает о существовании поля height класса TVRoom}

В этих случаях приходится явно переопределять тип указателя, используя имя типа указателя (см. параграф 2.5):

Туре р TVRoom= А TVRoom;

Var рС: ATRoom; {указатель на объекты базового класса} E:TVRoom;... {объект производного класса}

рС:= @Е; {присваиваем указателю на объекты базового класса адрес объекта производного класса}

pTVRoom(pC)A.height:=2.7; {явно переопределяем тип указателя}

<< | >>
Источник: Иванова Г.С. Основы программирования. 2002

Еще по теме Наследование:

  1. § 40 Наследование в боковой линии. – В каких случаях женщина пользуется правом представления. – Наследование в родовом имении сообразно происхождению имения. – Наследование в благоприобретенном имении. – Предпочтение полнородных неполнородным (ст. 1133–1140).
  2. § 43 Особые порядки наследства. – Наследование и раздел у крестьян по обычаю. – Закон наследования в прибалтийских губерниях.
  3. § 38 Когда открывается наследство по русскому закону. – Ограничения наследственного права. – Имущество, составляющее предмет наследования. – Отношение наследования по закону к завещанию. – Кто может быть наследником?
  4. § 35 Поводы к открытию наследства. – Имущества, составляющие наследство. – Способные, неспособные и недостойные к наследованию. – Призвание к наследованию и приобретение наследства. – Договоры о наследстве и предварительный отказ от наследства. – Прямой и непрямой наследник. – Праздное и выморочное наследство.
  5. § 32 Общие понятия о наследстве и о наследственном преемстве. – Отношение завещания к законному наследованию. – Римское господство завещательного начала и отрицание его в германском праве. – Историческое развитие наследственного порядка в римском праве. – Допущение к наследованию кровных родственников.
  6. § 41 Наследование родителей. – Наследование супругов. – Выдел указной части. – Особливые преимущества вдового супруга при выделе. – Выдел из имения свекра и тестя. – Свойство права на иск о выделе и переход сего права к наследникам. – Отличия в Черниговской и Полтавской губерниях. – Особливые постановления по разным ведомствам (ст. 1141–1147).
  7. § 34 Смешанные системы в новейших законодательствах. – Происходящее от различия сих систем различие в порядке раздела и в допущении права представления. – Ограничение наследственного права пределами родства. – Ограничение женщин. – Разделение наследства между родами. – Возвращение подаренного родителями. – Наследование супругов и незаконных детей и родителей. – Закон наследования в Англии.
  8. Виды наследования.
  9. § 37 Исторический очерк русского наследственного права. – Первые начала наследования по договорам с греками, по Русской Правде и судебникам. – Влияние родового начала и политической борьбы с боярством на постановления о наследстве. – Отличия в наследовании между поместьями и вотчинами. – Образование вдовьей и дочерней части. – Право женщин-родственниц при мужчинах. – Недоумения о праве представления. – Соединение поместий с вотчинами и указ о единонаследии. – Отмена его. – Причины затруднений и
  10. II. НАСЛЕДОВАНИЕ
  11. Глава 13 НАСЛЕДОВАНИЕ
  12. § 2. НАСЛЕДОВАНИЕ ПО ЗАКОНУ
  13. § 3. НАСЛЕДОВАНИЕ ПО ЗАВЕЩАНИЮ
  14. § 2. Наследование по завещанию
  15. 3. Основания наследования
  16. Статья 1223. Право на наследование
  17. Понятие наследования.
  18. Статья 1258. Очередность наследования по закону
  19. § 1. Понятие и основания наследования