Лекция: Параметрический полиморфизм
Параметрический полиморфизм — это механизм использования обобщенного определения функции или класса (шаблона) для автоматической генерации новых функций или классов.
Шаблон функции — это обобщенное определение функции, использующее типы в качестве параметров функции.
— Синтаксис шаблона функции:
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> ;
— при вызове класса компилятор автоматически создает экземпляр класса, заменяя параметры шаблона на заданные в операторе вызова типы.
Контрольные вопросы
1. Что такое объектно-ориентированное программирование?
2. Что такое классы и объекты?
3. Какие специальные элементы-функции имеются в классе?
4. Какие бывают спецификаторы доступа к элементам класса?
5. Чем отличаются простое и множественное наследование?
6. Как управляют доступом к наследуемым элементам?
7. Зачем нужны виртуальные базовые классы?
8. Что означает перегрузка операций и перегрузка функций?
9. Какие преимущества дают виртуальные функции?
10. Для чего используется параметрический полиморфизм?