- Шаблоны функций, специализация

Презентация "Шаблоны функций, специализация" по информатике – проект, доклад

Слайд 1
Слайд 2
Слайд 3
Слайд 4
Слайд 5
Слайд 6
Слайд 7
Слайд 8
Слайд 9
Слайд 10
Слайд 11
Слайд 12
Слайд 13
Слайд 14
Слайд 15
Слайд 16
Слайд 17
Слайд 18
Слайд 19
Слайд 20
Слайд 21
Слайд 22

Презентацию на тему "Шаблоны функций, специализация" можно скачать абсолютно бесплатно на нашем сайте. Предмет проекта: Информатика. Красочные слайды и иллюстрации помогут вам заинтересовать своих одноклассников или аудиторию. Для просмотра содержимого воспользуйтесь плеером, или если вы хотите скачать доклад - нажмите на соответствующий текст под плеером. Презентация содержит 22 слайд(ов).

Слайды презентации

Шаблоны функций, специализация. Степанюк Константин Сергеевич 24const@gmail.com
Слайд 1

Шаблоны функций, специализация

Степанюк Константин Сергеевич 24const@gmail.com

Шаблоны функций. template  void sort(vector&); void f (vector& vi, vector &vs){ sort(vi); //sort(vector&) sort(vs); //sort(vector&) } При вызове шаблона функции аргументы могут однозначно определять какая версия шаблона используется. В этом случае говорят что аргументы шаблона фу
Слайд 2

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

template void sort(vector&); void f (vector& vi, vector &vs){ sort(vi); //sort(vector&) sort(vs); //sort(vector&) } При вызове шаблона функции аргументы могут однозначно определять какая версия шаблона используется. В этом случае говорят что аргументы шаблона функции выводятся по аргументам функции Компилятор может вывести аргументы как являющиеся типами так и обычные при условии, что список аргументов функции однозначно идентифицирует набор аргументов шаблона

Пример. template  T& lookup(Buffer&b, const char *p); class Record { const char[12]; //… }; Record& f(Buffer &buf, const char *p) { // вызвать lookup(), где T-Record, i -128 return lookup(buf,p); } //Иногда требуется указать аргумент явно: template  T* create(); void f() { vector v;
Слайд 3

Пример

template T& lookup(Buffer&b, const char *p); class Record { const char[12]; //… }; Record& f(Buffer &buf, const char *p) { // вызвать lookup(), где T-Record, i -128 return lookup(buf,p); } //Иногда требуется указать аргумент явно: template T* create(); void f() { vector v; int *p = create(); }

Перегрузка шаблонов функций. template  T sqrt(T); template  complex sqrt( complex); double sqrt(double); void f(complex z){ sqrt(2); //sqrt (int) sqrt(2.0); //sqrt(double) sqrt(z);	//sqrt (complex) }
Слайд 4

Перегрузка шаблонов функций

template T sqrt(T); template complex sqrt( complex); double sqrt(double); void f(complex z){ sqrt(2); //sqrt (int) sqrt(2.0); //sqrt(double) sqrt(z); //sqrt (complex) }

Правила разрешения перегрузки. Ищется набор специализаций шаблонов функций, принимается решение какие аргументы были бы использованы, если бы в текущей области видимости не было других шаблонов функций и обычных функций с тем же именем (в примере –sqrt(complex) и sqrt>(complex) Если могут быть вы
Слайд 5

Правила разрешения перегрузки

Ищется набор специализаций шаблонов функций, принимается решение какие аргументы были бы использованы, если бы в текущей области видимости не было других шаблонов функций и обычных функций с тем же именем (в примере –sqrt(complex) и sqrt>(complex) Если могут быть вызваны два шаблона функции и один из них более специализирован чем другой, на последующих этапах только он и рассматривается.(Для нашего примера предпочтение отдается sqrt(complex) по отношению к sqrt(complex) )

Разрешается перегрузка для данного набора функций, а также для любых обычных функций (в соответствии с правилами разрешения перегрузки для обычных функций). Если аргументы функции шаблона были определены путем выведения по фактическим аргументам шаблона, к ним нельзя применять «продвижение», стандар
Слайд 6

Разрешается перегрузка для данного набора функций, а также для любых обычных функций (в соответствии с правилами разрешения перегрузки для обычных функций). Если аргументы функции шаблона были определены путем выведения по фактическим аргументам шаблона, к ним нельзя применять «продвижение», стандартные и определяемые пользователем преобразования типа. (в нашем примере sqrt(int) является точным соответствием и поэтому ей отдается предпочтение по отношению к sqrt(double) Если и обычная функция и специализация подходят одинаково хорошо, то предпочтение отдается обычной функции (sqrt(double) а не sqrt(double)

Если ни одного соответствия не найдено или процесс оканчивается нахождением двух или более одинаково хорошо подходящими вариантами, то выдается соответствующая ошибка компиляции template T max (T, T); const int s = 7; void doIt() { max(1,2); // max(1,2) max('a','b'); // max('a','b') max(2.7,4.9); //
Слайд 7

Если ни одного соответствия не найдено или процесс оканчивается нахождением двух или более одинаково хорошо подходящими вариантами, то выдается соответствующая ошибка компиляции template T max (T, T); const int s = 7; void doIt() { max(1,2); // max(1,2) max('a','b'); // max('a','b') max(2.7,4.9); // max (2.7,4.9) max(s,7); //max(int(s), 7) –тривиальное преобр. max('a',1); //error –неоднозначность, стандартные //преобразования не применяются max(2.7,4); //error –неоднозначность }

Разрешение неоднозначности. Явная квалификация: max(‘a’,1); // max (int(‘a’), 1) max(2.7,4) // max(2.7, double(4)) Добавление подходящих объявлений inline int max (int i, int j) {return max(i, j);} inline double max (double d1, double d2) { return max(d1, d2); } inline double max (int i, double d) {
Слайд 8

Разрешение неоднозначности

Явная квалификация: max(‘a’,1); // max (int(‘a’), 1) max(2.7,4) // max(2.7, double(4)) Добавление подходящих объявлений inline int max (int i, int j) {return max(i, j);} inline double max (double d1, double d2) { return max(d1, d2); } inline double max (int i, double d) { return max(i, d);} inline double max (double d, int i) { return max(d, i);} void f () { max(‘a’,1); //max (int ('a'), 1) max(2.7, 4); //max (2.7, double (4)) }

Перегрузка и наследование. Правила перегрузки гарантируют, что функции шаблоны корректно взаимодействуют с наследованием: template  class B {/*…*/}; template  class D: public B {/*…*/}; template  void f( B* ); void g (B *pb, D *pd) { f(pb); //f (pb) f(pd); //f (static_cast*>(pd)); }
Слайд 9

Перегрузка и наследование

Правила перегрузки гарантируют, что функции шаблоны корректно взаимодействуют с наследованием: template class B {/*…*/}; template class D: public B {/*…*/}; template void f( B* ); void g (B *pb, D *pd) { f(pb); //f (pb) f(pd); //f (static_cast*>(pd)); }

Дополнительные аспекты разрешения. Аргумент функции, не использующийся при выведении параметра шаблона рассматривается точно также, как аргумент функции, не являющейся шаблоном, и к нему применяются обычные правила преобразования для аргумента функции при перегрузке обычных функций: template  int ge
Слайд 10

Дополнительные аспекты разрешения

Аргумент функции, не использующийся при выведении параметра шаблона рассматривается точно также, как аргумент функции, не являющейся шаблоном, и к нему применяются обычные правила преобразования для аргумента функции при перегрузке обычных функций: template int get_nth (C& p, int n); class Index { public: operator int(); }; void f (vector &v, short s, Index i) { int i1 = get_nth (v, 2); //точное соответсвие int i2 = get_nth (v, s); //short в int int i3 = get_nth (v, i); //Index в int }

Использование аргументов шаблона для выведения алгоритма. template  > int compare (const String& s1, const String& s2) { for (int i=0; i class Cmp { public: static int eq (T a, T b) { return a==b; } static int lt (T a, T b) { return a  str1, str2; //compare > (str1, str2); compare (str
Слайд 11

Использование аргументов шаблона для выведения алгоритма

template > int compare (const String& s1, const String& s2) { for (int i=0; i class Cmp { public: static int eq (T a, T b) { return a==b; } static int lt (T a, T b) { return a str1, str2; //compare > (str1, str2); compare (str1,str2); compare > (wstr1, wstr2);

Специализация. По умолчанию шаблон предоставляет единое определение генерируемого типа которое используется для всех возможных аргументов шаблона Но иногда может возникнуть необходимость в уточнении определения для определенных категорий аргументов, например: «Если аргументом является указатель, то
Слайд 12

Специализация

По умолчанию шаблон предоставляет единое определение генерируемого типа которое используется для всех возможных аргументов шаблона Но иногда может возникнуть необходимость в уточнении определения для определенных категорий аргументов, например: «Если аргументом является указатель, то используй эту реализацию, если нет –используй ту» «Выдай сообщение об ошибке если аргументом шаблона не является указатель на объект класса, производного от My_base» Многие подобные проблемы решаются обеспечением альтернативных определений шаблона , выбор которых при инстанцировании осуществляет компилятор на основании аргументов шаблона указанных при его использовании

Класс Vector – кандидат на специализацию. template  class Vector { T* v; int sz; public: Vector(); Vector(int); T& elem(int i) {return v[i];} T& operator[] (int i); void swap(Vector&); }; Vector vi; Vector vps; Vector vs; Vector vpc; Vector vpn;
Слайд 13

Класс Vector – кандидат на специализацию

template class Vector { T* v; int sz; public: Vector(); Vector(int); T& elem(int i) {return v[i];} T& operator[] (int i); void swap(Vector&); }; Vector vi; Vector vps; Vector vs; Vector vpc; Vector vpn;

Специализация Vector. template  class Vector  { void **p; int sz public: Vector(); Vector(int); void* &elem(int i) {return p[i];} void* &operator[] (int i) {return elem(i);} void swap(Vector&); //… }; Полная специализация –отсутствует параметр шаблона, который бы следовало задавать или к
Слайд 14

Специализация Vector

template class Vector { void **p; int sz public: Vector(); Vector(int); void* &elem(int i) {return p[i];} void* &operator[] (int i) {return elem(i);} void swap(Vector&); //… }; Полная специализация –отсутствует параметр шаблона, который бы следовало задавать или который бы выводился при инстанцировании при использовании специализации

Частичная специализация. template  class Vector  : private Vector { public: typedef Vector Base; Vector():Base() {} explicit Vector(int): Base(i) {} T* &elem(int i) { return static_cast (Base::elem()); } T* &operator[] (int i) { return static_cast (Base::operator[](i)); } //… }; Vector vps;
Слайд 15

Частичная специализация

template class Vector : private Vector { public: typedef Vector Base; Vector():Base() {} explicit Vector(int): Base(i) {} T* &elem(int i) { return static_cast (Base::elem()); } T* &operator[] (int i) { return static_cast (Base::operator[](i)); } //… }; Vector vps; // -это , T –shape Vector vppi; // -это , T –int*

Правила объявлений для специализаций. Общий шаблон должен быть объявлен прежде любой специализации Если программист специализирует где-нибудь шаблон, то эта специализация должна быть в области видимости при каждом использовании шаблона с типом, для которого он был специализирован Все специализации ш
Слайд 16

Правила объявлений для специализаций

Общий шаблон должен быть объявлен прежде любой специализации Если программист специализирует где-нибудь шаблон, то эта специализация должна быть в области видимости при каждом использовании шаблона с типом, для которого он был специализирован Все специализации шаблона должны быть объявлены в том же пространстве имен что и сам шаблон Одна специализация считается более специализированной чем другая если каждый список аргументов соответствующий образцу первой специализации соответствует и второй специализации, но не наоборот Более специализированной версии будет отдаваться предпочтение в объявлениях объектов, указателей, а также при разрешении перегрузки

Пример, специализация функций. //общий шаблон template class Vector; //частичная специализация template  class Vector; //полная специализация template  class Vector; template  bool less (T a, T b) {return a bool less (const char *a, const char *b) { return strcmp(a,b) можно опустить: template bool l
Слайд 17

Пример, специализация функций

//общий шаблон template class Vector; //частичная специализация template class Vector; //полная специализация template class Vector; template bool less (T a, T b) {return a bool less (const char *a, const char *b) { return strcmp(a,b) можно опустить: template bool less(const char *a, const char *b) { return strcmp(a,b)

Наследование и шаблоны. Наследование реализации и обеспечение типобезопасного использования, например: template  class Vector  : private Vector{/*…*/}; Уточнение существующего шаблона (класса) или обобщение набора операций, например: template  class CheckedVector : public Vector{/*…*/}; template  cl
Слайд 18

Наследование и шаблоны

Наследование реализации и обеспечение типобезопасного использования, например: template class Vector : private Vector{/*…*/}; Уточнение существующего шаблона (класса) или обобщение набора операций, например: template class CheckedVector : public Vector{/*…*/}; template class Basic_ops { public: bool operator==(const C&) const; bool operator!=(const C&) const; const C& derived() {return static_cast*this;} };

Пример использования. template  class Math_container :public Basic_ops > { public: size_t size() const; T& operator[] (size_t); const T& operator[](size_t) const; //… }; template  bool Basic_ops::operator==(const C& a) const { if (derived().size() != a.size()) return false; for (int i
Слайд 19

Пример использования

template class Math_container :public Basic_ops > { public: size_t size() const; T& operator[] (size_t); const T& operator[](size_t) const; //… }; template bool Basic_ops::operator==(const C& a) const { if (derived().size() != a.size()) return false; for (int i = 0; i

Организация исходного кода. Ранние компиляторы: Объявления и определения шаблонов размещаются в заголовочном файле Заголовочный файл включается во все единицы трансляции где используются данные шаблоны Современные компиляторы: Заголовочный файл включает только объявления шаблона, определение иго стр
Слайд 20

Организация исходного кода

Ранние компиляторы: Объявления и определения шаблонов размещаются в заголовочном файле Заголовочный файл включается во все единицы трансляции где используются данные шаблоны Современные компиляторы: Заголовочный файл включает только объявления шаблона, определение иго структуры и его специализаций (без определения членов шаблона) Определения членов шаблона размещаются в некоторой единице компиляции и предваряются ключевым словом export по аналогии со встраиваемыми (inline)функциями

Примеры кода. Первый вариант //file out.h : #include  template  void out (const T &t) {std::err void out (const T&); //file out.cpp #include  export template  void out(const T &t) {…} //file user2.cpp – отсутствует зависимость от iostream #include “out.h”
Слайд 21

Примеры кода

Первый вариант //file out.h : #include template void out (const T &t) {std::err void out (const T&); //file out.cpp #include export template void out(const T &t) {…} //file user2.cpp – отсутствует зависимость от iostream #include “out.h”

Вопросы. Какая лекция\тема понравилась Вам больше всего? Удовлетворяет ли Вас качество организации и проведения занятий? Как вы считаете, что следует изменить для улучшения качества усвоения материала? Планируете ли Вы в дальнейшем заниматься в сфере информационных технологий?
Слайд 22

Вопросы

Какая лекция\тема понравилась Вам больше всего? Удовлетворяет ли Вас качество организации и проведения занятий? Как вы считаете, что следует изменить для улучшения качества усвоения материала? Планируете ли Вы в дальнейшем заниматься в сфере информационных технологий?

Список похожих презентаций

Microsoft Word: стили, шаблоны, оглавление

Microsoft Word: стили, шаблоны, оглавление

Оглавление. 1. Шаблоны Microsoft Word 2.. Создание документа на базе стандартного шаблона Word 3. Создание шаблона 4. Изменение шаблона 5. Стили Microsoft ...
Шаблоны и темы презентаций PowerPoint

Шаблоны и темы презентаций PowerPoint

Шаблоны, шаблоны оформления, темы…. Не следует путать шаблоны Power Point 2007 с шаблонами оформления, которые использовались только в предыдущих ...
Шаблоны в Quanta Plus

Шаблоны в Quanta Plus

Понятие шаблонов. Шаблоны – это каркасы документов, куски сценариев и файлы, на которые можно вставить ссылку. Шаблоны в Quanta Plus – стандартная ...
Шаблоны безопасности

Шаблоны безопасности

Удалённое управление рабочей станцией. Active Directory – пользователи и компьютеры -> … ->  -> Управление. Администраторы домена \Администратор -> ...
Построение графиков функций в электронных таблицах MS Excel

Построение графиков функций в электронных таблицах MS Excel

Вопрос 1. В электронной таблице основной элемент рабочего листа – это: ячейка строка столбец формула. Вопрос 2. Выберите верное обозначение строки ...
Особенности работы функций

Особенности работы функций

Двумерные массивы. Ввод и вывод. void vv_matr(int a[][10], int *n, int *m) //или int (*a)[10] { //передаем массив указателей на строки, n и m – по ...
Основные понятия и правила записи функций в Excel

Основные понятия и правила записи функций в Excel

Функции в Excel. Функциями в Microsoft Excel называют объединения нескольких вычислительных операций для решения определенной задачи. Функции в Microsoft ...
Метод потенциальных функций

Метод потенциальных функций

Метод потенциальных функций связан со следующей процедурой. В процессе обучения с каждой точкой пространства изображений, соответствующей единичному ...
Шаблоны классов

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

11.1. Контейнеры. Контейнер – хранилище некоторой совокупности данных Операции с контейнером не зависят от типа данных, размещенных в контейнере Пример: ...
Использование встроенных функций Excel

Использование встроенных функций Excel

Все о формулах. Формула выполняет вычисления соответствующих заданий и отображает на листе окончательный результат; В формулах Excel можно использовать ...
Графики функций в Power Point

Графики функций в Power Point

Построение графика кусочной функции. График функции Y X 5 1 -5. 3 -2 6 y=|2(x-3)2-2| 1. 4 7. Сбор графика 2. Чтение графика кусочной функции. -∞ D(f) ...
Что такое программирование

Что такое программирование

Назначение программирования- разработка программ управления компьютером с целью решения различных информационных задач. Специалисты, профессионально ...
Тест Алгоритмизация и программирование

Тест Алгоритмизация и программирование

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

Фрагментированное программирование

Цель работы. Распараллеливание исполнительной системы (ИС) фрагментированного программирования и её оптимизация. Постановка задачи. Разработка многопоточной ...
Объектно-ориентированное программирование

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

основано на принципах логического вывода из базы знаний – фактов и правил. Логическое программирование. основано на принципе последовательной детализации ...
Параллельное программирование WinAPI и OpenMP 7

Параллельное программирование WinAPI и OpenMP 7

Литература. 1. И. Одинцов Профессиональное программирование. Системный подход. – «БХВ-Петербург» - 2004. – 610 с. 2. Джин Бэкон, Тим Харрис Операционные ...
Объектно-ориентированное программирование

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

Содержание:. Графы: определения и примеры Ориентированные графы Путь в орграфе Матрица смежности Иерархический список Алгоритм Дейкстры Программа ...
Нелинейное программирование

Нелинейное программирование

Отличия от ЗЛП: 1. ОДЗ не обязательно выпуклая. 2. Экстремум не обязан находится на границе ОДЗ. - задача классической оптимизации. Пример:. . Метод ...
Логическое программирование

Логическое программирование

Содержание. Определение и алгоритм решения головоломок Поиск в пространстве решений (в глубину/ширину) Примеры решения логических задач Общие выводы. ...
Динамическое программирование

Динамическое программирование

Основные определения (подробно). Многие задачи практического программирования являются задачами на перебор вариантов и выбор среди этих вариантов ...

Конспекты

Применение функций InputBox, MsgBox и метода Print для создания проекта

Применение функций InputBox, MsgBox и метода Print для создания проекта

Автор: Екимова Ирина Викторовна. Место работы: МБОУ «СОШ №36» г.Норильск. Должность: учитель информатики. Урок для 9 класса по теме «Применение ...
Построение графиков функций в Excel

Построение графиков функций в Excel

Муниципальное общеобразовательное учреждение. «средняя общеобразовательная школа № 3 с углубленным изучением отдельных предметов». город Строитель ...
Построение графиков функций в электронных таблицах MS Excel

Построение графиков функций в электронных таблицах MS Excel

Муниципальное автономное общеобразовательное учреждение. гимназия № 144. Конспект урока по информатикев 9 классеПостроение графиков ...
Показательная функция, ее свойства и график. Построение графиков функций в среде программирования Visual Basic

Показательная функция, ее свойства и график. Построение графиков функций в среде программирования Visual Basic

Муниципальное бюджетное общеобразовательное учреждение «Кюсюрская средняя общеобразовательная школа»Булунского улуса Республики Саха (Якутия). ...
Использование логических функций

Использование логических функций

Практическая работа №22. «Использование логических функций». Цель работы: научиться использовать логические функции в Excel. Задание № 1. 1. ...
Графики математических функций в Microsoft Excel 2007

Графики математических функций в Microsoft Excel 2007

Графики математических функций в Microsoft Excel 2007. Урок 1. К этому уроку ученики должны обладать основными сведениями по программе Microsoft ...
Ввод формул. Ссылки на ячейки. Относительные, абсолютные и смешанные ссылки. Функции. Использование стандартных функций

Ввод формул. Ссылки на ячейки. Относительные, абсолютные и смешанные ссылки. Функции. Использование стандартных функций

1. . 8. . класс. . Практическая работа за компьютером на тему:. . Ввод формул. Ссылки на ячейки. . . Относительные, абсолютные и смешанные ...
Excel: Построение графиков функций

Excel: Построение графиков функций

МОУ ДОД «Кош-Агачский ЦДОД». «Excel: Построение графиков функций». Мастер-класс. по математике и информатике для 9 класса. Аспенбетова ...

Советы как сделать хороший доклад презентации или проекта

  1. Постарайтесь вовлечь аудиторию в рассказ, настройте взаимодействие с аудиторией с помощью наводящих вопросов, игровой части, не бойтесь пошутить и искренне улыбнуться (где это уместно).
  2. Старайтесь объяснять слайд своими словами, добавлять дополнительные интересные факты, не нужно просто читать информацию со слайдов, ее аудитория может прочитать и сама.
  3. Не нужно перегружать слайды Вашего проекта текстовыми блоками, больше иллюстраций и минимум текста позволят лучше донести информацию и привлечь внимание. На слайде должна быть только ключевая информация, остальное лучше рассказать слушателям устно.
  4. Текст должен быть хорошо читаемым, иначе аудитория не сможет увидеть подаваемую информацию, будет сильно отвлекаться от рассказа, пытаясь хоть что-то разобрать, или вовсе утратит весь интерес. Для этого нужно правильно подобрать шрифт, учитывая, где и как будет происходить трансляция презентации, а также правильно подобрать сочетание фона и текста.
  5. Важно провести репетицию Вашего доклада, продумать, как Вы поздороваетесь с аудиторией, что скажете первым, как закончите презентацию. Все приходит с опытом.
  6. Правильно подберите наряд, т.к. одежда докладчика также играет большую роль в восприятии его выступления.
  7. Старайтесь говорить уверенно, плавно и связно.
  8. Старайтесь получить удовольствие от выступления, тогда Вы сможете быть более непринужденным и будете меньше волноваться.

Информация о презентации

Ваша оценка: Оцените презентацию по шкале от 1 до 5 баллов
Дата добавления:27 апреля 2019
Категория:Информатика
Содержит:22 слайд(ов)
Поделись с друзьями:
Скачать презентацию
Смотреть советы по подготовке презентации