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

На нашем сайте вы можете скачать и просмотреть онлайн доклад-презентацию на тему ООП 6. Обобщённое программирование. Шаблоны (параметризованные типы) абсолютно бесплатно. Урок-презентация на эту тему содержит всего 21 слайд. Все материалы созданы в программе PowerPoint и имеют формат ppt или же pptx. Материалы и темы для презентаций взяты из открытых источников и загружены их авторами, за качество и достоверность информации в них администрация сайта не отвечает, все права принадлежат их создателям. Если вы нашли то, что искали, отблагодарите авторов - поделитесь ссылкой в социальных сетях, а наш сайт добавьте в закладки.
Презентации » Устройства и комплектующие » ООП 6. Обобщённое программирование. Шаблоны (параметризованные типы)



Оцените!
Оцените презентацию от 1 до 5 баллов!
  • Тип файла:
    ppt / pptx (powerpoint)
  • Всего слайдов:
    21 слайд
  • Для класса:
    1,2,3,4,5,6,7,8,9,10,11
  • Размер файла:
    197.00 kB
  • Просмотров:
    50
  • Скачиваний:
    0
  • Автор:
    неизвестен



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

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

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

№3 слайд
. define SP Type struct
Содержание слайда: 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(), двоичного поиска 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, за которым следует список параметров шаблона.

№7 слайд
template lt class T gt T
Содержание слайда: template <class T> T toPower (T base, int exponent){   T result = base;   if (exponent==0) return (T)1;   if (exponent<0) return (T)0;   while (--exponent) result *= base;   return result; } int i = toPower <int>(10, 3); int i = toPower (10, 3); // Т становится типом int long l = toPower (1000L, 4); // Т становится типом long double d = toPower (1e5, 5); //Т становится типом double int i = toPower (1000L, 4); // ошибка компиляции: // используются разные типы данных

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

№9 слайд
Шаблоны функций с несколькими
Содержание слайда: Шаблоны функций с несколькими аргументами // Шаблон функции поиска // в массиве template <class atype> 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 <class T> 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 T> class Pair {    T a, b;  public:    Pair (T t1, T t2);    T Max();    T Min ();    int isEqual (); };

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

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

№14 слайд
Шаблонные методы template lt
Содержание слайда: Шаблонные методы template <class T> struct Array{ template<class V> Array<T>& operator=  (Array<V> const & m); }; template<class T> template<class V> Array<T>& Array<T>:: operator =  (Array const & m) { … }

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

№16 слайд
Специализация шаблона
Содержание слайда: Специализация шаблона template <class T> struct Array { … };   template<> struct Array<bool> { …  //отдельная реализация только для bool };

№17 слайд
Частичная специализация
Содержание слайда: Частичная специализация Массив указателей: template<class T> struct Array<T*> { … }; // T- указатель на какой-либо тип Массив массивов: template<class T> struct Array<Array<T> > { … }; //T - массив Array

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

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

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

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

Скачать все slide презентации ООП 6. Обобщённое программирование. Шаблоны (параметризованные типы) одним архивом: