Содержание
- 2. Обобщенное программирование ОП - Образец программирования, заключающаяся в таком описании данных и алгоритмов, которое можно применять
- 3. Обобщенное программирование Обобщенное программирование это создание кода, работающего с разными типами, заданными в виде аргументе, причем
- 4. Обобщенное программирование Данную форму обобщенного программирования, основанную на явных шаблонных параметрах, часто называют параметрическим или статическим
- 5. Существует несколько различий между динамическим и статическим полиморфизмом . Наиболее очевидным является то, что выбор вызываемой
- 6. Для чего же на самом деле используются шаблоны? Для получения непревзойденно гибких и высокопроизводительных программ. Используйте
- 7. #define ListNode(Type) \ class ListNode##Type { \ private: \ ListNode##Type* next; \ Type* data; \ public:
- 8. Шаблоны Шаблон (template) — это класс или функция, параметризованные набором типов и/или целыми числами. template class
- 9. Шаблонные аргументы Аргументы шаблонного класса указываются каждый раз, когда используется его имя. vector v1; // OK
- 10. Конкретизация шаблонов Вариант шаблона для конкретного набора шаблонных аргументов называется специализацией. Процесс генерации специализаций на основе
- 11. Шаблонные типы членов-классов Шаблон может иметь как члены, являющиеся типами, так и члены, не являющиеся типами
- 12. Библиотеки классов Стандартная библиотека шаблонов STL Boost библиотека шаблонов SGI библиотека шаблонов Arageli – математическая библиотека
- 13. Пример Рассмотрим пример наиболее распространенного использования целочисленного значения в качестве шаблонного аргумента: контейнер, количество элементов которого
- 14. Мы можем использовать класс array примерно так: array gb; // 256 целых чисел const int max
- 15. Пример array ad = { 0.0, 1.1, 2.2, 3.3, 4.4, 5.5 }; double* р = ad;
- 16. Вывод шаблонных аргументов Создавая объект конкретного класса на основе шаблонного класса, мы указываем шаблонные аргументы. array
- 17. Обобщение класса Пусть есть класс : class MyVector{ private: double* m_data; Int m_size; public: void allocate
- 18. 1) Как запрограммировать класс MyVector , если тип х не имеет значения по умолчанию? 2) Как
- 19. Пример MyVector v; v.resize(100) ; // добавляем 100 копий объекта double(), v.resize(200, 0.0); // добавляем 100
- 20. Проблему, связанную с деструктором, устранить труднее. Это связано с тем, что в структуре данных часть данных
- 21. Класс allocator — то, что нужно для реализации функции MyVector :: reserve (). Начнем с того,
- 22. Единственный код, который следует изменить, — это функции-члены класса MyVector , непосредственно работающие с памятью, например
- 23. Имея функции reserve(), MyVector ::push_back(), можно написать следующее: template void MyVector ::push_back (const T& val) {
- 24. Разумно сочетайте статический и динамический полиморфизм Статический и динамический полиморфизм дополняют друг друга. Следует ясно представлять
- 25. Динамический полиморфизм позволяет значению иметь несколько типов посредством открытого наследования. Например, Derived*p можно рассматривать как указатель
- 26. Статический полиморфизм посредством шаблонов также позволяет значению иметь несколько типов. Внутри шаблона tempiate void f( т
- 27. Согласно книге - Krzysztof Czarnecki and Ulr;ch W. Eisenecker, Generative Programming - Methods, Tools, and Applications'.
- 28. Наиболее значительный вклад в этой области принадлежит стандартной библиотеке шаблонов (Standard Template Library STL), которая позже
- 29. template Iterator max_element ( Iterator beg, // Начало коллекции Iterator end) // Конец коллекции { //
- 30. Теперь можно находить максимум любой коллекции, вызывая обобщенную операцию max_element () с указанием начала и конца
- 31. #include #include"MyClass.hpp" #include #include #include template void printMax(T & coll) { // Вычисление позиции максимального значения
- 32. Параметризируя свои операции в терминах итераторов, STL избегает резкого увеличения количества определений операций. Вместо того чтобы
- 33. Вариативные шаблоны Начиная с C++11, параметрам шаблонов можно сопоставлять переменное количество аргументов шаблона. Это дает возможность
- 34. #include void print() { } template void print( T firstArg, Types... args) { std::cout print(args...); //
- 35. Первый вызов расширяется до print (7.5, "hello", s); где • firstArg имеет значение 7.5, так что
- 36. Можно и по другому. #include template void print(T arg) { std::cout } templateCtypename T, typename... Types>
- 37. Параллелизация вычислений
- 38. #include #include #include #include using namespace concurrency; using namespace std; // Вызывает предоставленную рабочую функцию //
- 39. // Создает квадратную матрицу с заданным количеством строк и столбцов. double** create_matrix(size_t size){ double** m =
- 40. // Инициализирует заданную квадратную матрицу со значениями, // которые генерируются данной заданной функцией генератора. template double**
- 41. // Вычисляет произведение двух квадратных матриц. void matrix_multiply ( double** m1, double** m2, double** result, size_t
- 42. template void parallel_for(_Index_type _First, _Index_type _Last, const _Function& _Func, const auto_partitioner& _Part = auto_partitioner()) { parallel_for(_First,
- 43. int main() { const size_t size = 1000; // Создает генератор случайных чисел. mt19937 gen (42);
- 44. // печатает время многократного параллельного умножение матриц wcout [&] { parallel_matrix_multiply (m1, m2, result, size );
- 45. Домашнее задание на неделю Проект 30. Создать абстрактный базовый класс именем своей фамилии, записанной латиницей. Создать
- 47. Скачать презентацию