🗊 Презентация Шаблоны

Нажмите для полного просмотра!
Шаблоны, слайд №1 Шаблоны, слайд №2 Шаблоны, слайд №3 Шаблоны, слайд №4 Шаблоны, слайд №5 Шаблоны, слайд №6 Шаблоны, слайд №7 Шаблоны, слайд №8 Шаблоны, слайд №9 Шаблоны, слайд №10 Шаблоны, слайд №11 Шаблоны, слайд №12 Шаблоны, слайд №13 Шаблоны, слайд №14 Шаблоны, слайд №15 Шаблоны, слайд №16 Шаблоны, слайд №17 Шаблоны, слайд №18 Шаблоны, слайд №19 Шаблоны, слайд №20 Шаблоны, слайд №21 Шаблоны, слайд №22 Шаблоны, слайд №23 Шаблоны, слайд №24 Шаблоны, слайд №25 Шаблоны, слайд №26 Шаблоны, слайд №27 Шаблоны, слайд №28 Шаблоны, слайд №29 Шаблоны, слайд №30 Шаблоны, слайд №31 Шаблоны, слайд №32 Шаблоны, слайд №33 Шаблоны, слайд №34 Шаблоны, слайд №35

Содержание

Вы можете ознакомиться и скачать презентацию на тему Шаблоны. Доклад-сообщение содержит 35 слайдов. Презентации для любого класса можно скачать бесплатно. Если материал и наш сайт презентаций Mypresentation Вам понравились – поделитесь им с друзьями с помощью социальных кнопок и добавьте в закладки в своем браузере.

Слайды и текст этой презентации


Слайд 1


Тема 15 Шаблоны
Описание слайда:
Тема 15 Шаблоны

Слайд 2


Зачем нужны шаблоны? Сильно типизированный язык , такой, как C++, создает препятствия для реализации совсем простых функций. Реализация таких функций...
Описание слайда:
Зачем нужны шаблоны? Сильно типизированный язык , такой, как C++, создает препятствия для реализации совсем простых функций. Реализация таких функций должна быть многократно повторена для различных типов, хотя алгоритм остаётся одним и тем же. int Min(int a, int b ) { return a < b ? a : b; } Эта функция неприменима к типу double: cout

Слайд 3


Решение проблемы: перегруженные функции int Min(int a, int b ) { return a < b ? a : b; } double Min(double a, double b ) { return a < b ? a : b; }...
Описание слайда:
Решение проблемы: перегруженные функции int Min(int a, int b ) { return a < b ? a : b; } double Min(double a, double b ) { return a < b ? a : b; } long long Min(long long a, long long b ) { return a < b ? a : b; } и т.д.

Слайд 4


Преимущества и недостатки этого подхода Преимущество: возможность реализовать особенности работы с определёнными типами const char* Min(const char*...
Описание слайда:
Преимущества и недостатки этого подхода Преимущество: возможность реализовать особенности работы с определёнными типами const char* Min(const char* a, const char* b ) { return strcmp(a, b)

Слайд 5


Решение проблемы: использование макросов #define Min(a, b) ((a) < (b) ? (a) : (b)) Недостатки: одинаковая реализация для всех типов; это – не вызов...
Описание слайда:
Решение проблемы: использование макросов #define Min(a, b) ((a) < (b) ? (a) : (b)) Недостатки: одинаковая реализация для всех типов; это – не вызов функции, а текстовая подстановка, так что выражения будут рассчитываться дважды. int p=6; std::cout

Слайд 6


Определение шаблона Шаблон – это реализация функции или класса для типов, которые передаются в шаблон в качестве параметров Синтаксис задания шаблона...
Описание слайда:
Определение шаблона Шаблон – это реализация функции или класса для типов, которые передаются в шаблон в качестве параметров Синтаксис задания шаблона функции: template реализация_функции ; // объявление или определение Категории параметров шаблона: параметры-типы class имя_параметра typename имя_параметра параметры-переменные тип имя_параметра

Слайд 7


Задание шаблона для функции min() template Type Min(Type a, Type b) { return a < b ? a : b; } или template T Min(T a, T b) { return a < b ? a : b; }...
Описание слайда:
Задание шаблона для функции min() template Type Min(Type a, Type b) { return a < b ? a : b; } или template T Min(T a, T b) { return a < b ? a : b; } Использование шаблона: cout

Слайд 8


Реализация шаблонов При компиляции текста шаблона проводится лишь синтаксический анализ заголовка, программный код не генерируется; генерация...
Описание слайда:
Реализация шаблонов При компиляции текста шаблона проводится лишь синтаксический анализ заголовка, программный код не генерируется; генерация программного кода выполняется при его вызове. При этом определяются значения параметров-типов и для каждого нового параметра-типа строится свой экземпляр шаблона. Такой механизм называется инстанциацией (конкретизацией) шаблона.

Слайд 9


Ошибки компиляции при использовании шаблонов Ошибки компиляции возможны при использовании недопустимых синтаксических конструкций в заголовке шаблона...
Описание слайда:
Ошибки компиляции при использовании шаблонов Ошибки компиляции возможны при использовании недопустимых синтаксических конструкций в заголовке шаблона или функции: template Type Min( Type a, Type b )) { return a < b ? a: b; } Эта ошибка обнаружится всегда, даже если нет ни одной конкретизации шаблона.

Слайд 10


Ошибки компиляции при использовании шаблонов Ошибки компиляции возможны при использовании недопустимых синтаксических конструкций в тексте функции:...
Описание слайда:
Ошибки компиляции при использовании шаблонов Ошибки компиляции возможны при использовании недопустимых синтаксических конструкций в тексте функции: template Type Min( Type a, Type b ) { return a < b ? a? b; } Эта ошибка обнаружится при первой же конкретизации шаблона.

Слайд 11


Ошибки компиляции при использовании шаблонов Ошибки компиляции возможны при использовании недопустимых синтаксических конструкций в процессе...
Описание слайда:
Ошибки компиляции при использовании шаблонов Ошибки компиляции возможны при использовании недопустимых синтаксических конструкций в процессе конкретизации шаблона: template Type Min( Type a, Type b ) { return a < b ? a: b; } Эта ошибка обнаружится при конкретизации шаблона для типа, у которого не определена операция «меньше». Person p1(”John”), p2(”Richard”); … Person p3(Min(p1, p2)); // Ошибка!

Слайд 12


Явное и неявное указание параметров при конкретизации шаблонов cout
Описание слайда:
Явное и неявное указание параметров при конкретизации шаблонов cout

Слайд 13


Явное и неявное указание параметров при конкретизации шаблонов cout
Описание слайда:
Явное и неявное указание параметров при конкретизации шаблонов cout

Слайд 14


Специализация шаблонов (определение) В некоторых случаях имеется специальная информация о типе, позволяющая написать более эффективную функцию, чем...
Описание слайда:
Специализация шаблонов (определение) В некоторых случаях имеется специальная информация о типе, позволяющая написать более эффективную функцию, чем конкретизированная по шаблону. А иногда общее определение, предоставляемое шаблоном, для некоторого типа просто не работает. Явное определение специализации – это такое определение, в котором за ключевым словом template следует пара угловых скобок , а за ними – определение специализированного шаблона: template тип_возврата функция (параметры_функции) {реализация}

Слайд 15


Специализация шаблонов (часть 1) cout
Описание слайда:
Специализация шаблонов (часть 1) cout

Слайд 16


Специализация шаблонов (часть 2) cout
Описание слайда:
Специализация шаблонов (часть 2) cout

Слайд 17


Специализация шаблонов (ограничения) Специализация шаблона должна быть определена до конкретизации! template Type Min( Type a, Type b ) { return a <...
Описание слайда:
Специализация шаблонов (ограничения) Специализация шаблона должна быть определена до конкретизации! template Type Min( Type a, Type b ) { return a < b ? a: b; } void my_func() { … cout

Слайд 18


Пример шаблона с параметрами-типами и параметрами-переменными Функция находит минимальный элемент в массиве, размер которого задаётся параметром...
Описание слайда:
Пример шаблона с параметрами-типами и параметрами-переменными Функция находит минимальный элемент в массиве, размер которого задаётся параметром шаблона (так делать категорически не рекомендуется!): template Type Min( Type *arr) { Type m = arr[0]; for (unsigned i=1; i=arr[i]) m = arr[i]; return m; } Конкретизация: int M[50]; //заполнение массива M cout

Слайд 19


Для чего нужны шаблоны классов? Наиболее очевидное использование - адаптивные объекты памяти или контейнеры. Вернёмся к примеру из предыдущих лекций:...
Описание слайда:
Для чего нужны шаблоны классов? Наиболее очевидное использование - адаптивные объекты памяти или контейнеры. Вернёмся к примеру из предыдущих лекций: typedef int InfoType; class LQueue { … } Преимущества: легко переходить к другому типу хранимых данных. Недостатки: невозможно в одном приложении организовать очереди для различных типов; не для всех типов данных такая реализация работает

Слайд 20


Описание шаблона класса template class имя_класса{ … }; … template реализация_методов; Реализация метода: template тип_возврата имя_класса ::имя...
Описание слайда:
Описание шаблона класса template class имя_класса{ … }; … template реализация_методов; Реализация метода: template тип_возврата имя_класса ::имя метода { … } В параметрах шаблона, в отличие от шаблонов функций, могут быть заданы значения по умолчанию!

Слайд 21


Описание очереди через шаблон #ifndef __LQueue_defined__ #define __LQueue_defined__ #include using namespace std; template class LQueue { … }; #endif
Описание слайда:
Описание очереди через шаблон #ifndef __LQueue_defined__ #define __LQueue_defined__ #include using namespace std; template class LQueue { … }; #endif

Слайд 22


Реализация отдельных методов очереди
Описание слайда:
Реализация отдельных методов очереди

Слайд 23


Особенности работы с типом const char *
Описание слайда:
Особенности работы с типом const char *

Слайд 24


Общий шаблон для метода Pop()
Описание слайда:
Общий шаблон для метода Pop()

Слайд 25


Специализация метода Pop() для класса const char *
Описание слайда:
Специализация метода Pop() для класса const char *

Слайд 26


Конструктор QItem и его специализация для класса const char *
Описание слайда:
Конструктор QItem и его специализация для класса const char *

Слайд 27


Особенности компоновки проекта при создании шаблона классов Шаблоны компилируются только в момент их конкретизации, и разнесение реализации класса и...
Описание слайда:
Особенности компоновки проекта при создании шаблона классов Шаблоны компилируются только в момент их конкретизации, и разнесение реализации класса и его использования в различные файлы без связи друг с другом становится невозможным. Возможные способы решения этой проблемы: дать пользователю класса описание шаблонов в исходных текстах; реализовать собственные классы на основе шаблонов для наиболее употребимых типов.

Слайд 28


Особенности доступа к элементам очереди Оператор [] возвращает ссылку на хранящийся в очереди элемент, позволяя его изменять. Для типа char * это...
Описание слайда:
Особенности доступа к элементам очереди Оператор [] возвращает ссылку на хранящийся в очереди элемент, позволяя его изменять. Для типа char * это может привести к изменению указателя. Следствия: утечка памяти; доступ к памяти, выделенной вне класса. Следовательно, этот оператор нельзя применять для указанного типа.

Слайд 29


Решение возникшей проблемы запрет выполнения оператора [] для класса const char *; Предоставление вместо этого метода SetByIndex для выполнения...
Описание слайда:
Решение возникшей проблемы запрет выполнения оператора [] для класса const char *; Предоставление вместо этого метода SetByIndex для выполнения замены строк Кроме того, имеет смысл написать защищённый метод, возвращающий указатель на элемент очереди с указанным индексом.

Слайд 30


Метод PtrByIndex()
Описание слайда:
Метод PtrByIndex()

Слайд 31


Вызовы метода PtrByIndex() из открытых методов
Описание слайда:
Вызовы метода PtrByIndex() из открытых методов

Слайд 32


Специализация метода SetByIndex()
Описание слайда:
Специализация метода SetByIndex()

Слайд 33


Оператор typeid() Оператор typeid имеет две формы: typeid(выражение) typeid(тип) Он создаёт объект класса type_info с информацией о типе операнда....
Описание слайда:
Оператор typeid() Оператор typeid имеет две формы: typeid(выражение) typeid(тип) Он создаёт объект класса type_info с информацией о типе операнда. Пример использования typeid: cout

Слайд 34


Использование typeid() вместо специализации
Описание слайда:
Использование typeid() вместо специализации

Слайд 35


Использование typeid() вместо специализации (продолжение)
Описание слайда:
Использование typeid() вместо специализации (продолжение)



Теги Шаблоны
Похожие презентации
Mypresentation.ru
Загрузить презентацию