Содержание
- 2. Зачем нужны шаблоны? Сильно типизированный язык , такой, как C++, создает препятствия для реализации совсем простых
- 3. Решение проблемы: перегруженные функции int Min(int a, int b ) { return a } double Min(double
- 4. Преимущества и недостатки этого подхода Преимущество: возможность реализовать особенности работы с определёнными типами const char* Min(const
- 5. Решение проблемы: использование макросов #define Min(a, b) ((a) Недостатки: одинаковая реализация для всех типов; это –
- 6. Определение шаблона Шаблон – это реализация функции или класса для типов, которые передаются в шаблон в
- 7. Задание шаблона для функции min() template Type Min(Type a, Type b) { return a } или
- 8. Реализация шаблонов При компиляции текста шаблона проводится лишь синтаксический анализ заголовка, программный код не генерируется; генерация
- 9. Ошибки компиляции при использовании шаблонов Ошибки компиляции возможны при использовании недопустимых синтаксических конструкций в заголовке шаблона
- 10. Ошибки компиляции при использовании шаблонов Ошибки компиляции возможны при использовании недопустимых синтаксических конструкций в тексте функции:
- 11. Ошибки компиляции при использовании шаблонов Ошибки компиляции возможны при использовании недопустимых синтаксических конструкций в процессе конкретизации
- 12. Явное и неявное указание параметров при конкретизации шаблонов cout Создаётся неявная конкретизация для типа int cout
- 13. Явное и неявное указание параметров при конкретизации шаблонов cout Ошибка компиляции: error C2782: 'Type Min(Type,Type)' :
- 14. Специализация шаблонов (определение) В некоторых случаях имеется специальная информация о типе, позволяющая написать более эффективную функцию,
- 15. Специализация шаблонов (часть 1) cout // неверный результат – Serge // Причина: выполняется сравнение указателей, //
- 16. Специализация шаблонов (часть 2) cout // неверный результат – Serge // Причина: выполняется сравнение указателей, //
- 17. Специализация шаблонов (ограничения) Специализация шаблона должна быть определена до конкретизации! template Type Min( Type a, Type
- 18. Пример шаблона с параметрами-типами и параметрами-переменными Функция находит минимальный элемент в массиве, размер которого задаётся параметром
- 19. Для чего нужны шаблоны классов? Наиболее очевидное использование - адаптивные объекты памяти или контейнеры. Вернёмся к
- 20. Описание шаблона класса template class имя_класса{ … }; … template реализация_методов; Реализация метода: template тип_возврата имя_класса
- 21. Описание очереди через шаблон #ifndef __LQueue_defined__ #define __LQueue_defined__ #include using namespace std; template class LQueue {
- 22. Реализация отдельных методов очереди template void LQueue ::Erase() { while (Pop()); size = 0; } template
- 23. Особенности работы с типом const char * Hello Kashkevich Serge world!
- 24. Общий шаблон для метода Pop() template bool LQueue ::Pop() { if (size==0) return false; QItem *tmp
- 25. Специализация метода Pop() для класса const char * template bool LQueue ::Pop() { if (size==0) return
- 26. Конструктор QItem и его специализация для класса const char * template class LQueue { … struct
- 27. Особенности компоновки проекта при создании шаблона классов Шаблоны компилируются только в момент их конкретизации, и разнесение
- 28. Особенности доступа к элементам очереди Оператор [] возвращает ссылку на хранящийся в очереди элемент, позволяя его
- 29. Решение возникшей проблемы запрет выполнения оператора [] для класса const char *; Предоставление вместо этого метода
- 30. Метод PtrByIndex() template void* LQueue ::PtrByIndex (unsigned k) const { if ((k =size)) throw exception("Impossible to
- 31. Вызовы метода PtrByIndex() из открытых методов template const InfoType& LQueue ::GetByIndex (unsigned k) const { return
- 32. Специализация метода SetByIndex() template void LQueue :: SetByIndex(const char * AInfo, unsigned k){ char * curr
- 33. Оператор typeid() Оператор typeid имеет две формы: typeid(выражение) typeid(тип) Он создаёт объект класса type_info с информацией
- 34. Использование typeid() вместо специализации template InfoType& LQueue ::operator [] (unsigned k) { if (typeid(InfoType)==typeid(const char *))
- 36. Скачать презентацию