Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Пособие-ООП - копия.doc
Скачиваний:
20
Добавлен:
17.08.2019
Размер:
907.78 Кб
Скачать

Абстрактные классы. Лекция №11.

В некоторых случаях виртуальная функция, объявленная в базовом классе не нужна для объектов этого класса, т.е. базовый класс не нуждается в своих объектах. Тогда базовый класс рассматривается как абстрактный класс.

Абстрактным классом называется базовый класс в иерархии наследования, содержащий чистые виртуальные функции, определенные в производных классах. Чистая виртуальная функция - это виртуальная функция, объявленная в абстрактном классе со спецификатором (=0) и определенная в производном классе. Пример:

class cl1 class cl2:public cl1 class cl3:public cl2

{ public: { public: { public:

virtual void vyvod()=0;}; void vyvod() {...} }; void vyvod() {...} };

Абстрактный класс характеризуется следующими свойствами:

  • имеет чистые виртуальные функции со спецификатором =0;

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

  • не имеет объектов и используется только как базовый класс;

Параметрический полиморфизм

Параметрический полиморфизм - это механизм использования обобщенного определения функции или класса (шаблона) для автоматической генерации новых функций или классов.

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

Шаблон функции - это обобщенное определение функции, использующее типы в качестве параметров функции.

Синтаксис шаблона функции:

template <class t1[,...]> //спецификация шаблона

t_vozvr imf(t1 p1[,...]) //определение функции

{ //t1 - идентификатор, обозначающий тип

... //imf - имя функции

} //p1 - параметр функции типа t1

Шаблон функции характеризуется следующими свойствами:

  • состоит из спецификации шаблона и определения функции; спецификация имеет список параметров шаблона, окаймленный скобками <>; определение функции использует параметры шаблона; например:

template <class tip>

void vyvod(tip x) { tip y=x; cout<<y;}

  • параметр шаблона - это любой идентификатор с ключевым словом class, обозначающий параметризованный тип; слово class означает обобщенное понятие любого типа, включая и тип class;

  • в списке параметров функции можно иметь также переменные со встроенными типами и типами, определяемыми пользователем; например: void vvod(tip x,int n);

  • при вызове функции компилятор автоматически создает экземпляр функции, заменяя параметры шаблона на заданные в операторе вызова типы; например: int a; vyvod(a);

  • могут быть перегруженными, как и обычные функции.

Шаблоны классов

Шаблон класса - это обобщенное определение класса, использующее тип в качестве параметра класса.

Синтаксис шаблона класса:

template <class t1[,...]>//спецификация шаблона

class imcl //определение класса

{ //t1 - идентификатор, обозначающий тип

... //class t1 - параметр шаблона

} //imcl - имя класса

Синтаксис оператора вызова:

imcl<tip1> obj; //объявление объекта класса с типом tip1

imcl<int> obj1; //создается класс для типа int

imcl<t> obj2; //создается класс для типа t

Шаблон класса характеризуется следующими свойствами:

  • состоит из спецификации шаблона и определения класса; спецификация имеет список параметров шаблона, окаймленный скобками <>; определение класса использует параметры шаблона;

  • параметр шаблона - это любой идентификатор с ключевым словом class, обозначающий параметризованный тип; слово class означает обобщенное понятие любого типа, включая и тип class;

  • в списке параметров шаблона можно иметь также переменные со встроенными типами и типами, определяемыми пользователем, так называемые нетипированные (нетиповые) параметры, значения которых должны быть константами; например: <class t,int n>;

  • при вызове класса компилятор автоматически создает экземпляр класса, заменяя параметры шаблона на заданные в операторе вызова типы.