Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Методичка 1.doc
Скачиваний:
33
Добавлен:
13.02.2015
Размер:
689.66 Кб
Скачать

Лабораторная работа № 6 механизм наследования

Цель работы: изучить концепцию наследования и режимы доступа к унаследованным элементам класса, а также получить практический навык использования этого механизма в средеC++ Builder.

Теоретические сведения

Наследование (Inheritance) – это механизм, позволяющий одному объекту приобретать элементы другого, при необходимости модифицируя их.

Объект, который наследует элементы другого, называется наследником или потомком (Child), а его класс называется производным классом (derived class) .

Объект, у которого наследуют элементы, называется родителем или предком (Parent), а его класс называют базовым классом (base class).

При объявлении нового класса, базовый класс указывается через двоеточие после имени класса.

class<Имя класса> : <Режим наследования> <Имя родительского класса>

{

private:

protected:

public:

};

Режим наследования определяет режим доступа у унаследованных элементов родительского класса в данном классе.

Механизм наследования позволяет создавать иерархическую цепочку объектов, каждый из которых приобретает все элементы, как своего родителя, так и всех его предков. Для этого все элементы, которые должны быть доступны наследникам, необходимо объявлять в разделах protectedилиpublic.

В языке С у каждого объекта может быть только один родитель, но один родитель может иметь множество наследников (рис.1).

Фрукты

Яблоки

Апельсины

Лимоны

Бананы

Рис. 7.1. Пример наследования

Использование механизма наследования, непосредственно, связано с правилами совместимости типов в языке С++для объектных переменных. Согласно им, объектной переменной, как указателю, можно присвоить адрес объекта того же класса, либо любого из его наследников.

В соответствии с этим различают 5 типов объектных переменных:

  1. Заданный тип– это тип, с которым объектная переменная объявляется в разделеvar:

  2. Текущий тип– это тип, с которым объектная переменная создается в памяти.

  3. Родительский заданного типа– это тип, который является одним из родителей заданного типа объекта.

  4. Дочерний текущего типа– это тип, который является одним из наследников текущего типа объектра.

  5. Непроизводный тип– это тип, который не является ни наследником, ни родителем заданного типа.

Таким образом, одна и тажа объектная переменная может иметь текущий тип, как заданного класса, так и любого из его наследников.

Если правила совместимости типов не выполняются, то во время компиляции программы появится сообщение об ошибке: Incompatible types.

Для явного преобразования типов в языке С++предусмотрена следующая конструкция:

((<Имя класса>*)<Имя указателя на объект>)-><Имя элемента>;

Данная конструкция преобразует заданный тип объекта к типу указанного класса. Это дает возможность использовать элементы не заданного, а текущего типа объекта. Если имя класса является дочерним текущего типа объекта, то во время выполнения программы будет сгенерирована исключительная ситуация EInvalidCast. Если же класс является родителем заданного типа, то преобразование происходить не будет (рис. 2).

Несовместимые типы

Совместимые типы

Incompatible type

Непроизвод

ный тип

Родительский заданного тип

Заданный

тип

Текущий

тип

Дочерний

текущегого

Преобразования нет

Преобразования есть

Ошибка преобразования

Рис. 7.2. Структурная схема совместимости типов в языке С++

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