Язык программирования C++ для профессионалов


Производные классы - часть 2


void f() { manager m1, m2; employee e1, e2; employee* elist; elist = &m1; // поместить m1 в elist m1.next = &e1; // поместить e1 в elist e1.next = &m2; // поместить m2 в elist m2.next = &e2; // поместить m2 в elist e2.next = 0; // конец списка }

Поскольку управляющий является и служащим, указатель manager* можно использовать как employee*. В то же время служащий не обязательно является управляющим, и поэтому employee* нельзя использовать как manager*.

В общем случае, если класс derived имеет общий базовый класс base, то указатель на derived можно без явных преобразований типа присваивать переменной, имеющей тип указателя на base. Обратное преобразование от указателя на base к указателю на derived может быть только явным:

void g() { manager mm; employee* pe = &mm; // нормально

employee ee; manager* pm = ⅇ // ошибка: // не всякий служащий является управляющим

pm->level = 2; // катастрофа: при размещении ee // память для члена `level' не выделялась

pm = (manager*) pe; // нормально: на самом деле pe // не настроено на объект mm типа manager

pm->level = 2; // отлично: pm указывает на объект mm // типа manager, а в нем при размещении // выделена память для члена `level' }

Иными словами, если работа с объектом производного класса идет через указатель, то его можно рассматривать как объект базового класса. Обратное неверно. Отметим, что в обычной реализации С++ не предполагается динамического контроля над тем, чтобы после преобразования типа, подобного тому, которое использовалось в присваивании pe в pm, получившийся в результате указатель действительно был настроен на объект требуемого типа.

on_load_lecture()

Дальше »

  Если Вы заметили ошибку - сообщите нам.  

Страницы:

1

|

2

|

3

|

4

|

5

|

6

|

7

|

8

|

9

|

10

|

вопросы | »

|

учебники

|

для печати и PDA


Курсы | Учебные программы | Учебники | Новости | Форум | Помощь



Телефон: +7 (495) 253-9312, 253-9313, факс: +7 (495) 253-9310, email: info@intuit.ru

© 2003-2007, INTUIT.ru::Интернет-Университет Информационных Технологий - дистанционное образование




- Начало -  - Назад -  - Вперед -



Книжный магазин