Step 5 (S-10671)
Step on Stepik: https://stepik.org/lesson/553/step/5
[00:00 - 00:16] давайте обсудим как император убирать при перегрузке для то пытался описать упрощенную версию говорить на перегрузки который используется в компиляторе для выборов вот алгоритма есть 3 случая 1 случай наиболее простой то есть ли среди функции которой участвуют перегрузки то есть
[00:16 - 00:30] техники которыми данными если 1 функция которая идеально удовлетворяет то есть у этой функции типы аргументов совпадают с типами аргументам которые были переданы функцию при вызове этом случае мы используем это идеально подходящее фото
[00:30 - 00:46] 2 случай если среди тех функций которые часто в переноске нет ни 1 функцией которых могло подойти даже с учетом преобразование типов в этом случае компилятор выдает ошибку потому что непонятно какой функции например такое может случиться
[00:46 - 01:05] если вы передали функцию 1 аргумент а все функции которые нашлись при перегрузке мед 2 этом случае конечно же не сможет сказать ни о каком то тоже непонятно как вызвать функцию от 2 аргументов если есть 3 случай самое интересное это если есть функции которые подходят с учетом преобразователя
[01:05 - 01:22] то есть не 1 функция не подходит идеально но есть несколько функций для 1 функция которая подходит чтобы преобразовать если так это только 1 то называется эта функция то есть с аргументом происходят необходимые преобразования называется эта функция есть и такие функции есть несколько тогда мы должны понять какая из функций
[01:22 - 01:37] подходит лучше остальных для этому должны классифицировать преобразования который нужно сделать с аргументами самое простое преобразование самое дешевое предложение от отсутствия преобразователя то есть самая хорошая если там какие то ценит аргумента нинужно него преобразовать
[01:37 - 01:55] дальше есть 3 класса преобразований 1 класс самый дешевый самый простой это расширение типов это преобразование встроенных числовых типов когда позволяет изменчивости получить больше есть 3 вида таких решений типов это решение типов когда из маленьких
[01:55 - 02:13] целочисленных типов со знаком мы получаем int этот преобразования когда из маленьких целочисленных типов без знака мы получаем или акцент и преобразование когда из числа с плавающей точкой
[02:13 - 02:31] одинарной точности мы получаем что плавающей точкой двойной точности следующий класс уже более дорогих преобразований это стандартная преобразования туда входят преобразования для числовых типов например преобразования из дабла то есть это не является решением типом но
[02:31 - 02:50] это стандартная препинания которые так же может произойти при вызове функции а также преобразования указателей например преобразование указателя на производный класс указать на базовый класс или преобразование указатель к указателю на будет запомнить любой указатели можно передавать указатель на вот
[02:50 - 03:05] 3 класс преобразований это пользовательские преобразовать эти преобразования которые задаются какими то это так например если класса а определить конструктор от типа б тогда будет преобразования типа б класса
[03:05 - 03:21] то есть это преобразования которые создаются при помощи определенных пользователем методов это самые дорогие преобразования они считаются наиболее плохим после этого мы должны понять какая функция подходит лучше других то что в нем сочеталось
[03:21 - 03:37] подходящая она должна быть строго лучше других это значит что по каждому аргументу эта функция должна быть преобразования не хуже чем оставшись но самые плохие это преобразование а самое хорошее это решение типов или просто отсутствие образования
[03:37 - 03:53] то есть та функция которая в конце концов будет вынуждать перегрузки должна быть строго лучше она по каждому параметру должна преобразование не хуже чем оставшийся и по какому то параметру должна иметь преобразование лучше чем оставшись если такая функция найдется
[03:53 - 04:12] единственное то в этом случае она будет выбрана в качестве перегрузки если таких функций будет несколько то есть не будет внятно функции которые строго лучше на то есть так что думаю то когда тогда компилятор выдаст ошибку что в данном случае вызов неоднозначна то есть есть несколько функций которые подходят и нет ни 1 которая
[04:12 - 04:27] строго участок важно отметить что процесс перегрузки происходит в момент компиляции то есть после компиляции в те места где вызывать функции будут поставлены конкретные адреса тех функций которые были выбраны в результате перегрузки
[04:27 - 04:44] есть на этапе выполнения уже никакой перегрузки не происходит там называются конкретные функции по адресу это надо хорошо понимать и помнить то что нам потребуется дальше еще важно отметить что реальный правда перегрузки намного сложнее чем то что здесь указано
[04:44 - 05:00] то есть например не пытаются всячески культиваторы не упоминаются функции с переменным числом параметров шаблоны и прочее в реальности эти правила намного сложнее и не стоит злоупотреблять перегрузка то есть не стоит писать такой код
[05:00 - 05:13] в котором будет непонятно какая конкретная функция должна быть вызван в данном конкретном месте то есть вы таким образом может запутать как себя так и тех людей которые потом когда его будут читать ваш код