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

Lect14

.pdf
Скачиваний:
6
Добавлен:
06.02.2016
Размер:
492.04 Кб
Скачать

14.Обобщенное программирование

«Объектно-ориентированное программирование»

доцентПриваловМ.В.

Донецк,ДонНТУ,2011

1

Обобщенноепрограммирование

Обобщенноепрограммирование– это парадигмапрограммирования, заключающаясявсозданииклассови написанииалгоритмов,которые можноприменятькразличнымтипам данных.

ВООПобобщенное программированиереализуетсяза

счетпримененияшаблонов(или generics)

2

Зачемнужнообобщенное программирование?

Различныетипыданныхчасто требуетсяобрабатыватьприпомощи однихитехжеалгоритмов

Типичныевариантыприменения:

Сортировкаипоиск

Контейнерыдляпроизвольноготипа элементов

Программированиенаосновестратегий

3

Пример

Требуетсяразработатьсемейство функцийmaximum(a, b),

возвращающуюзначениенаибольшего изаргументовa иb

Аргументыa иb могутиметь произвольныйчисловой тип

int

unsigned int

double

float

Типрезультатадолженсовпадатьстипом аргумента

4

Решениесиспользованием

перегрузки

int maximum(int a, int b) { return (a > b) ? a : b;

}

unsigned int maximum(unsigned int a, unsigned int b)

{

return (a > b) ? a : b;

}

float maximum(float a, float b) { return (a > b) ? a : b;

}

double maximum(double a, double b) { return (a > b) ? a : b;

}

5

Недостаткиприведенного решения

Телофункцииприходитсяписать несколькораз

Усложнениепроцессавнесения измененийвреализациюфункций:

Ситуацияусложняется,еслиразличные экземплярыоднойитойжефункции разнесеныпоразличнымфайламили модулям

6

Лучшийвариант– использование шаблоновфункций

ЯзыкC++ имеетязыковыесредства, позволяющиеопределитьфункциюшаблон,работающуюснекоторымине известнымизаранеетипамиданных

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

Шаблонныефункциишироко

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

7

Ограничения

Реализация(исходныйкод)шаблонной функциидолжнабытьдоступнаизвсех единицкомпиляции,гдеона используется

8

Примерсшаблоном

template <class T>

T maximum(T a, T b) {

return (a > b) ? a : b;

}

int main() {

int max1 = maximum(3, 5);

float max2 = maximum(-3.7f, 0.35f) double max3 = maximum(1.2, 7.4); string max4 = maximum(string(“hello"),

string(“world")); return 0;

}

9

Примерсшаблоном

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

template <class идентификатор_типа1, class идентификатор_типа2, …

class идентификатор_типаN> описание;

или

template <typename идентификатор_типа1, typename идентификатор_типа2, …

typename идентификатор_типаN> описание;

10

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]