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

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

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

Абстрактный класс

содержит нереализованные чисто виртуальные функции

создание экземпляров абстрактных классов запрещено

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

07.04.2012

cppNewb.ru

21

Абстрактный класс как тип

определяет тип (интерфейс)

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

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

07.04.2012

cppNewb.ru

22

Использование абстрактных классов

запрещает передачу экземпляров по значению

гарантирует осуществление

повышающего приведения типа через указатель или ссылку

07.04.2012

cppNewb.ru

23

Определение чисто виртуальной функции

аналогично обычной функции

класс остается абстрактным

позволяет вызывать общий код в производных классах

07.04.2012

cppNewb.ru

24

Определение чисто виртуальной функции (пример)

class CPrintable

{

public:

virtual void writeTxt(ostream& os) = 0;

};

void CPrintable::writeTxt(ostream& os)

{

// общий код

}

// class CMan : public CTxtIO

07.04.2012

cppNewb.ru

25

Изменение типа возвращаемого значения

возможно

функция базового класса

возвращает указатель или ссылку на базовый класс

переопределенная функция

может возвращать указатель или ссылку на производный класс

07.04.2012

cppNewb.ru

26

Особенности конструкторов и деструкторов

код инициализации VPTR вставляется в конструктор

механизм виртуального вызова не

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

07.04.2012

cppNewb.ru

27

Виртуальный деструктор

нужен для правильно разрушения объекта производного класса через указатель/ссылку базового класса

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

пример:

virtual ~CBase();

07.04.2012

cppNewb.ru

28

Чисто виртуальный деструктор

имеет право быть

должен иметь тело

предотвращает возможность создания

экземпляров класса

07.04.2012

cppNewb.ru

29

Однокоренные иерархии

работа с контейнерами

отладочный функционал

протоколирование

сохранение/восстановление данных

07.04.2012

cppNewb.ru

30