Step 2 (S-11540)
Step on Stepik: https://stepik.org/lesson/564/step/2
[00:00 - 00:16] кроме шаблонов классов позволяет определить и шаблонов шаблоны функции нужны для тех же целей что шаблонных классов значит использовании можно избежать дублирования кода давайте например посмотрим как можно спать шаблонов в 1 таком той мере мы напишем
[00:16 - 00:32] функция которая возводит некоторое число таким образом что эта функция будет работать для всех часовых типов для которых определен оператор умножения но для начала давайте разберемся как можно было бы решать подобную задачу без использования шаблонов
[00:32 - 00:49] давайте для определенности считать что он хотел написать вам всего заведение в квадрат который будет работать всего лишь 2 типами это соответственно и существенным типа если бы мы решали эту задачу на языке c нам потребовалось бы написать 2 функции
[00:49 - 01:04] возведение в квадрат 1 работала бы типом int другая более того за счет того что в языке отсутствует перегрузка у нас не получилось бы назвать этим с 1 и тем же именем и нам пришлось бы дать им разные имена например square
[01:04 - 01:21] таким образом программисты каждый раз когда вызываешь когда должен был сам определять какое из этих 2 функционировать если бы писали этот код на языке c + + без использования объектной термопредохранитель шаблонов том мы бы так же написали 2 функции
[01:21 - 01:39] для интервью для флота но в отличие от языка c + + есть перегрузка и поэтому эти функции можно назвать одинаково то есть с кое каким образом мы перекладываем этот выбор необходимо функции в каждом конкретном месте с
[01:39 - 01:54] программиста на компилятор в кинотеатре есть механизм переброски которой на основе того типа для которого эта функция называется будет выбирать 1 из этих 2 вот если мы решали подобную задачу
[01:54 - 02:14] кто то пернул программированием то правильное решение выглядело бы примерно следующим образом мы бы определили некоторый интерфейс который бы поддерживали встреч событий в этом интерфейсе были бы все стандартные математические операции ну например
[02:14 - 02:31] ну какие то еще то другие там сложение деление вычитание виртуальный деструктор и заставили бы все классы которые соответствуют типам поддерживать этот интерфейс
[02:31 - 02:48] в нашем случае мы хотели бы реализовать эту функцию для типов int и float которые являются встроенными типами классами не является поэтому нам пришлось бы написать классы обертки таким образом чтобы эти обертки поддерживали интерфейс а нам то есть нам пришлось бы написать
[02:48 - 03:03] класс int класс флот который реализован интерфейс i намбер соответственно реализован метод ему теплоты и используя этот интерфейс вы могли бы написать 1 функцию
[03:03 - 03:18] введение в квадрате она был примерно следующим образом есть мы принимаем некоторое число через указатель на него и внутри этой функции умножаем это число на самого себя при такой
[03:18 - 03:36] реализация эта функция заработала с любыми типами которые поддерживают интерфейс давай теперь проанализируем ну вот эти 2 c + + подходы 1 подход с использовании обычных функций 2 использованием объектно ориентированного программирования
[03:36 - 03:54] 1 подход наиболее простой однако довольно муторной нам каждый раз приходится дублировать код если мы посмотрим на реализации этих функций то видно что она диетично то есть все что для этого этот непосредственно тип с которым они работают
[03:54 - 04:13] что касается 2 варианта с программированием то здесь нам требуется время с ним все только 1 функцию это хорошо написали только 1 функцию не дублировали код нам приходится делать достаточно много дополнительных действий
[04:13 - 04:30] для того чтобы обернуть все встроенные типы объектов более того за счет того что эти обертки должны работать полиморфно то есть мы должны работать с ними через указатели выделять намеченной памяти и прочее за счет этого мы потеряем производительность
[04:30 - 04:46] данная функция square и такое представление простых встроенных типов оно довольно сильно ударяет производительностью давайте посмотрим как это значит можно было бы еще при помощи шаблонов для то он просто определим шаблонную функцию сделаем это
[04:46 - 05:01] аналогично тому как мы определяли шаблоны класс то есть воспользуемся ключевым словом темплэйты дальше укажем что у данного шаблона 1 параметр типовой параметр нам и после этого определим
[05:01 - 05:18] соответствующую функцию французу день в квадрат которая принимает значение типа данном случае по значениям типа нам может быть значение любого типа которые поддерживают то есть для которого продлен оператор умножения
[05:18 - 05:33] если поддержит и про торможения то может использовать внутри такой функции и соответственно для него определяется возведение в квадрат как видите решение при помощи шаблонов
[05:33 - 05:48] 3 решение оно намного проще чем решение о с обыкновенным программированием и позволяет избежать дублирования кода как это было в решении из обычных