Step 5 (S-10007)

From Stepik Wiki
Jump to: navigation, search

Step on Stepik: https://stepik.org/lesson/546/step/5

Step 5 (S-10007) 1.png

[00:00 - 00:16] конструктор от 1 аргумента выделяются на фоне других конструкторов дело в том что такие конструкторы преобразование вот значение тип аргумента этого конструктора к значение типом структуры или там есть отдел ничего дополнительно то такие преобразования будут работать в том числе и нее


[00:16 - 00:34] можно например определите переменную структура их принято реагировать ее значением того типа который принимает конструктор соответственно при таком пояса и нибудь неявных преобразований давайте посмотрим как это работает например пусть нас определена


[00:34 - 00:50] структура хранящая отрезок резко сдается 2 точками типа и у данного отрезка есть 2 конструктора конструктор без параметров заметьте что у него нету


[00:50 - 01:05] пустое тело однако за счет того что есть конструктор без параметров поля соответствующих точек проецируются на раме и


[01:05 - 01:23] просто именно сегмент значение координаты точек то есть по умолчанию создается отрезок 2 точек


[01:23 - 01:39] 2 конструктор позволяет создать отрезок определенной длины горизонтальный отрезок начинающийся в точке 0 то есть в списке инициализации не указана точка п 1 она нейтрализуется


[01:39 - 01:55] конструктор без параметров то есть номер а 2 точка не реагирует со значениями лань и 0 то есть например если мы создадим переменную типа отрезок и в качестве


[01:55 - 02:12] аргумента конструкты приедем туда число 10 то создаст отрезок 0 0 10 0 однако как я уже говорил конструктор от 1 аргумента сдают


[02:12 - 02:29] который в том числе работает как неявных преобразований поэтому если мы определим переменную типа отрезок числом что в принципе достаточно странно подавно


[02:29 - 02:46] запись тем меньше будет корректный код скооперироваться и это будет означать что мы создаем отрезок с координатами 0 20 0 то есть можно сказать что


[02:46 - 03:01] данный код будет эквивалентен следующем то сегмент равняется сегмент вот 20 за счет того что


[03:01 - 03:19] у данной структурой есть конструктор происходит неявное преобразование от числа 20 к отрезку созданные при помощи данного конструктора общества 20 для того чтобы запретить неявные преобразования используется ключевое слово explicit


Step 5 (S-10007) 2.png

[03:19 - 03:35] ключевое слово explicit оказывается перед объявлением конструктора от 1 параметра более того это слово имеет смысл только для конструкторов этого параметра конструктора как исправить можно вызвать дьявола


[03:35 - 03:52] указав при объявлении переменных вызов конструктора но при попытке вызвать его неявно мы получим ошибку компиляции использования пришел и спишет позволят защитить наш код от тех неявных преобразований которые мы не желаем


[03:52 - 04:11] например отрезка действительно достаточно странно что мы попытались проанализировать его числом скорее всего это ошибка разумной важно отметить что неявные поиски преобразования сдаются не только конструкторами


Step 5 (S-10007) 3.png

[04:11 - 04:27] от 1 аргумента ну и тебе конструкторами которые могут принимать только 1 аргумент то есть например у нас есть конструктор от 2 аргументов но указанное значение по умолчанию то в принципе этот конструкцию модели как конструктор от 1 аргумента давайте посмотрим


[04:27 - 04:46] например если у нас есть конструктор структуры которая принимает 2 параметра нам для обоих из них указано значение по умолчанию то этот конструктор может быть вызван и как конструктор без аргументов как конструктор от 1 аргумента как конструктор


[04:46 - 05:01] так как есть возможность вызвать данный конструктор от 1 аргумента то он также нервное поэтому есть смысл указать слово экспрессе перед его объявлением что позволит защититься


[05:01 - 05:11] не в некоторых названий но в данном случае от того что мы что то типа точка интерьером число