лекции программирование / polevoy_cpp_2012_spring_lecture_09
.pdfАбстрактный класс
•содержит нереализованные чисто виртуальные функции
•создание экземпляров абстрактных классов запрещено
•при наследовании от абстрактного класса все чисто виртуальные функции д.б. реализованы
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 |