Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

лекции программирование / polevoy_cpp_2012_spring_lecture_08

.pdf
Скачиваний:
24
Добавлен:
20.04.2015
Размер:
122.08 Кб
Скачать

Подстановочный критерий (нестрогая формулировка)

в любой точке вызова базового класса м.б. использован производный класс

или

любой экземпляр производного класса является допустимым экземпляром родительского класса

31.03.2012

cppNewb.ru

21

Конструирование производных объектов

конструктор базового класса д.б. вызван

умолчательные конструкторы базовых классов м.б. вызваны неявно компилятором

31.03.2012

cppNewb.ru

22

Список инициализации (пример)

Student::Student(

const string& name

,const string& secname

,const Group& group)

:Man(name, secname) , m_group(group)

{

}

31.03.2012

cppNewb.ru

23

Конструктор производного класса

должен

инициализировать базовый класс

инициализировать собственные поля

непосредственная инициализация полей базового класса невозможна

31.03.2012

cppNewb.ru

24

Порядок вызова конструкторов

по всей цепочке иерархии наследования, начиная от корневого базового класса и до текущего

на каждом уровне вызывается

конструктор базового класса

конструкторы внутренних объектов

31.03.2012

cppNewb.ru

25

Деструктор

каждый класс содержит единственный деструктор (без аргументов)

компилятор гарантирует вызов всех

деструкторов (по всей иерархии наследования)

31.03.2012

cppNewb.ru

26

Порядок вызова деструкторов

обратный порядку вызова конструкторов

по всей цепочке иерархии наследования, начиная от текущего и до корневого базового класса

на каждом уровне вызывается

деструкторы внутренних объектов

деструктор базового класса

31.03.2012

cppNewb.ru

27

Замещение метода

в производном классе м.б. определен метод с именем метода базового класса

переопределение перегруженного имени функции базового класса скрывает все остальные версии в производном классе

31.03.2012

cppNewb.ru

28

Изменение интерфейса (в т.ч. замещение)

изменение интерфейса базового класса посредством модификации сигнатуры и/или типа возвращаемого значения означает, что класс используется не тем способом, для которого обычно предназначается наследование

31.03.2012

cppNewb.ru

29

Доступ к скрытым именам

• осуществляется через полное имя

пример:

void

Derived::print(ostream& ostr)

{

Base::print(ostr);

}

31.03.2012

cppNewb.ru

30