Step 3 (S-11537)

From Stepik Wiki
Revision as of 08:15, 21 March 2017 by Admin (Talk | contribs) (Create page for step id=11537)

(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to: navigation, search

Step on Stepik: https://stepik.org/lesson/563/step/3

<img width="50%" src="https://ucarecdn.com/b716eb85-8a9e-4366-b3e2-13031b4fd535/">

[00:00 - 00:18] давайте сначала разберемся как подобные проблемы можно решить средствами языка c языке отсутствует шаблоны и вместо шаблонов там используется макрос стоит отметить что языке отсутствуют классы и точно такой же проблемой там не возникает однако там похоже города проблема связана с определением структуру и функции


[00:18 - 00:34] как решить нашу проблему проблему дублирования кода при помощи макроса давайте вместо того чтобы поддельность определяют класс мы определим макрос который будет раскрываться определения соответствующего мы определим макрос define


<img width="50%" src="https://ucarecdn.com/923d4dd2-5ef8-4cb5-8246-5f2bb9d5e2bb/">

[00:34 - 00:51] у этого макроса будет 2 параметра это имя класса который будет определяться и type тип хранимого элемент данный макрос будет раскрываться код соответствующее определению класса динамическом 8


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


[01:07 - 01:26] теперь если мы где то захотим определить класс динамического массива хранящего элементы типа int надо будет написать define эры указать имя класса динамического массива и


[01:26 - 01:42] имя типа храним валентинки данная строчка будет раскрыто препроцессором определение класса ремонт класса динамического массива которых они приметы типа int логично если мы хотим определить


[01:42 - 01:56] классы для хранения фото надо будет дальше эти классы можно использовать так же как если бы они были объявлены без использования макросов то есть просто


[01:56 - 02:14] переменную типа int переменную типа float что то с ними делает все будет работать то есть мы за счет использования макросов избежали дублирования год мы взяли код спасибо превратили в макрос не таким образом сам код


[02:14 - 02:31] у нас присутствует только в 1 экземпляре с непосредственно видимо такой подход в принципе вполне рабочий но он обладает 1 большим минусом дело в том что макросы как я рассказывал это подстановки на уровне текст


[02:31 - 02:47] то есть при такой постановке не проверять что сюда был передан правильно с точки зрения с + + индикатор не проверяются что 2 параметр это действительно иметь все ошибки возникнут на этапе компиляции и будет очень сложно


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


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


[03:20 - 03:36] это все 1 строка 10 пользуется символ сложились в конце каждой строки определение макроса используется слэш то что показано что следующая строка является продолжением предыдущих то есть с точки зрения компилятора это все 1 большая строка весь небольшой макрос


[03:36 - 03:50] он постарается в 1 инструкцию определение макроса которые заменяют строчку define эры на длинную строку соответствующую определению класс