🗊 Презентация ООП 6. Обобщённое программирование. Шаблоны (параметризованные типы)

Нажмите для полного просмотра!
ООП 6. Обобщённое программирование. Шаблоны (параметризованные типы), слайд №1 ООП 6. Обобщённое программирование. Шаблоны (параметризованные типы), слайд №2 ООП 6. Обобщённое программирование. Шаблоны (параметризованные типы), слайд №3 ООП 6. Обобщённое программирование. Шаблоны (параметризованные типы), слайд №4 ООП 6. Обобщённое программирование. Шаблоны (параметризованные типы), слайд №5 ООП 6. Обобщённое программирование. Шаблоны (параметризованные типы), слайд №6 ООП 6. Обобщённое программирование. Шаблоны (параметризованные типы), слайд №7 ООП 6. Обобщённое программирование. Шаблоны (параметризованные типы), слайд №8 ООП 6. Обобщённое программирование. Шаблоны (параметризованные типы), слайд №9 ООП 6. Обобщённое программирование. Шаблоны (параметризованные типы), слайд №10 ООП 6. Обобщённое программирование. Шаблоны (параметризованные типы), слайд №11 ООП 6. Обобщённое программирование. Шаблоны (параметризованные типы), слайд №12 ООП 6. Обобщённое программирование. Шаблоны (параметризованные типы), слайд №13 ООП 6. Обобщённое программирование. Шаблоны (параметризованные типы), слайд №14 ООП 6. Обобщённое программирование. Шаблоны (параметризованные типы), слайд №15 ООП 6. Обобщённое программирование. Шаблоны (параметризованные типы), слайд №16 ООП 6. Обобщённое программирование. Шаблоны (параметризованные типы), слайд №17 ООП 6. Обобщённое программирование. Шаблоны (параметризованные типы), слайд №18 ООП 6. Обобщённое программирование. Шаблоны (параметризованные типы), слайд №19 ООП 6. Обобщённое программирование. Шаблоны (параметризованные типы), слайд №20 ООП 6. Обобщённое программирование. Шаблоны (параметризованные типы), слайд №21

Содержание

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

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


Слайд 1


Обобщённое программирование. Шаблоны (параметризованные типы) Обобщённое программирование (generic programming) — парадигма программирования,...
Описание слайда:
Обобщённое программирование. Шаблоны (параметризованные типы) Обобщённое программирование (generic programming) — парадигма программирования, заключающаяся в таком описании данных и алгоритмов, которое можно применять к различным типам данных, не меняя само это описание. Обобщённое программирование = параметрический полиморфизм = статический полиморфизм. В C++ поддерживается шаблонами (template). Полиморфизм подтипов = динамический полиморфизм. В C++ поддерживается наследованием классов. Специальный полиморфизм (перегрузка функций).

Слайд 2


Повод: необходимость реализовать некий новый объем кода, аналогичный уже написанному, но изменив типы данных. Варианты решения: Дублирование...
Описание слайда:
Повод: необходимость реализовать некий новый объем кода, аналогичный уже написанному, но изменив типы данных. Варианты решения: Дублирование фрагментов кода (плохо!) Средствами языка С Макроопределения. Недостатки: целесообразно только для очень простых функций; отсутствует контроль типов; трудности при отладке; может сильно увеличить размер исполняемой программы

Слайд 3


1. #define SP(Type) \ struct Shared_ptr { \ Type *p; \ … }; SP(LongString); // не будет компилироваться для разных типов, //т.к. название структуры...
Описание слайда:
1. #define SP(Type) \ struct Shared_ptr { \ Type *p; \ … }; SP(LongString); // не будет компилироваться для разных типов, //т.к. название структуры Shared_ptr будет одинаково для всех типов. 2. #define SP(Type, Name) \ struct Name { \ Type *p; \ … }; SP(LongString, spLongString); //Код пишется не на языке, а макросом. //Следовательно, компилятор не сможет проверить код. //Могут возникнуть неожиданные подстановки Данным решением стоит пользоваться во встраиваемых системах, которые поддерживают только С.

Слайд 4


2) Обобщённое программирование с использованием нетипизированных указателей void* , например, библиотечные функции сортировки qsort(), двоичного...
Описание слайда:
2) Обобщённое программирование с использованием нетипизированных указателей void* , например, библиотечные функции сортировки qsort(), двоичного поиска bsearch(), копирования памяти memcpy(). void qsort(void *base, size_t num, size_t size, int (*compare) (const void *, const void *)); void * memcpy( void * destptr, const void * srcptr, size_t num ); Недостатки: отсутствие информации о типах; требует аккуратной работы с отдельными байтами; преобразование любых указателей к void* существенно менее наглядно

Слайд 5


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

Слайд 6


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

Слайд 7


template T toPower (T base, int exponent){ T result = base; if (exponent==0) return (T)1; if (exponent
Описание слайда:
template T toPower (T base, int exponent){ T result = base; if (exponent==0) return (T)1; if (exponent

Слайд 8


Требования к фактическим параметрам шаблона T result = base; return (T)1; return (T)0; result *= base; return result;
Описание слайда:
Требования к фактическим параметрам шаблона T result = base; return (T)1; return (T)0; result *= base; return result;

Слайд 9


Шаблоны функций с несколькими аргументами // Шаблон функции поиска // в массиве template int find(atype* array, atype value, int size) { for(int j =...
Описание слайда:
Шаблоны функций с несколькими аргументами // Шаблон функции поиска // в массиве template int find(atype* array, atype value, int size) { for(int j = 0; j < size; j++) if(array[j] == value) return j; return -1; }

Слайд 10


Отождествление типов аргументов template T max (T a, T b) { return a > b ? a : b; } … int i = max (1, 2); double d = max (1.2, 3.4); // Однако, если...
Описание слайда:
Отождествление типов аргументов template T max (T a, T b) { return a > b ? a : b; } … int i = max (1, 2); double d = max (1.2, 3.4); // Однако, если аргументы различных типов, то вызов max() приведет к ошибке.

Слайд 11


Шаблоны классов // класс, хранящий // пару значений template class Pair { T a, b; public: Pair (T t1, T t2); T Max(); T Min (); int isEqual (); };
Описание слайда:
Шаблоны классов // класс, хранящий // пару значений template class Pair { T a, b; public: Pair (T t1, T t2); T Max(); T Min (); int isEqual (); };

Слайд 12


Полное описание шаблона должно быть известно до его использования. Нельзя разбить объявление и реализацию на .cpp и .h файлы, реализация должна быть...
Описание слайда:
Полное описание шаблона должно быть известно до его использования. Нельзя разбить объявление и реализацию на .cpp и .h файлы, реализация должна быть известна и находиться в заголовочном файле. template Pair ::Pair (T t1, T t2) : a(t1), b(t2) {} template T Pair ::Max() {return a>b ? a : b;} template int Pair ::isEqual(){ if (a==b) return 1; return 0;}

Слайд 13


Параметризация числовыми параметрами Возможность задания числовых параметров позволяет, например, создавать объекты типов "Вектор из 20...
Описание слайда:
Параметризация числовыми параметрами Возможность задания числовых параметров позволяет, например, создавать объекты типов "Вектор из 20 целых", "Вектор из 1000 целых" или "Вектор из 10 переменных типа double". template class Vector { public: Vector(); ~Vector() {delete[] coord;} void newCoord (T x); T Max (); T Min(); int isEqual(); private: T *coord; int current; };

Слайд 14


Шаблонные методы template struct Array{ template Array& operator= (Array const & m); }; template template Array& Array:: operator = (Array const & m)...
Описание слайда:
Шаблонные методы template struct Array{ template Array& operator= (Array const & m); }; template template Array& Array:: operator = (Array const & m) { … }

Слайд 15


*Если шаблонная функция (или метод шаблонного класса) не вызывается, то она и не компилируется. *Виртуальная функция не может быть шаблонной....
Описание слайда:
*Если шаблонная функция (или метод шаблонного класса) не вызывается, то она и не компилируется. *Виртуальная функция не может быть шаблонной. Шаблонный конструктор: template struct Array { template Array(Array a) { … } }; /* предполагается, что есть неявное приведение типа V к T*/ Это не конструктор копирования!

Слайд 16


Специализация шаблона template struct Array { … }; template struct Array { … //отдельная реализация только для bool };
Описание слайда:
Специализация шаблона template struct Array { … }; template struct Array { … //отдельная реализация только для bool };

Слайд 17


Частичная специализация Массив указателей: template struct Array { … }; // T- указатель на какой-либо тип Массив массивов: template struct Array { …...
Описание слайда:
Частичная специализация Массив указателей: template struct Array { … }; // T- указатель на какой-либо тип Массив массивов: template struct Array { … }; //T - массив Array

Слайд 18


Различия между шаблоном класса и функциями Для функций отсутствуют частичные специализации. Но их можно заменить перегрузкой функций: template void...
Описание слайда:
Различия между шаблоном класса и функциями Для функций отсутствуют частичные специализации. Но их можно заменить перегрузкой функций: template void sort(Array& m) {...}; template void sort(T& t) {...};

Слайд 19


Typedef Чтобы избежать громоздких записей имен типов вида Array m; стоит использовать typedef: typedef Array AInt; Array m; typedef int* PI; typedef...
Описание слайда:
Typedef Чтобы избежать громоздких записей имен типов вида Array m; стоит использовать typedef: typedef Array AInt; Array m; typedef int* PI; typedef const PI CPI; //CPI будет константным указателем, т.к. известно, что PI - указатель. А при использовании #define в CPI было бы const int *, т.е. указатель на const int.

Слайд 20


Наследование в шаблонах классов template class Trio: public Pair { T c; public: Trio (T t1, T t2, T t3); ... }; template Trio::Trio (T t1, T t2, T...
Описание слайда:
Наследование в шаблонах классов template class Trio: public Pair { T c; public: Trio (T t1, T t2, T t3); ... }; template Trio::Trio (T t1, T t2, T t3): Pair (t1, t2), c(t3) {} /* вызов родительского конструктора также сопровождается передачей типа Т в качестве параметра*/

Слайд 21


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



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