Step 6 (S-10680)

From Stepik Wiki
Jump to: navigation, search

Step on Stepik: https://stepik.org/lesson/555/step/6

Step 6 (S-10680) 1.png

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


[00:14 - 00:31] профессор в классе прошлом есть конструктор в 2 параметров от имени возраста есть виртуальный деструктор есть виртуальный метод возвращающий имя есть виртуальный метод и patient который является чистым вертолет


Step 6 (S-10680) 2.png

[00:31 - 00:50] есть 2 поля которые хранят и не возраст у производного класса тичер есть также конструктор внутри конструктора мы вызовем виртуальный метод на им а пример с прошлого сайтом полночной аккуратно


Step 6 (S-10680) 3.png

[00:50 - 01:06] имя формально параметра конструктора вечер совпадало с именем метода поэтому при его покажет компиляции 50 поправил на чтобы не перекрывал соответственно на 3 конструктор вызывается метод name и


[01:06 - 01:25] в начале списка интересоваться мы вызываем конструктор базового класса таким образом передает параметры в конструктор базу класса и также инициализируем свое собственное поле курс которая хранит имя курса у класса те которые уже 3 параметра это имя возраст и название курса


[01:25 - 01:40] класс вечер переопределяет метод дом туча возвращается строка вечер и определяет свой собственный метод этот курс


[01:40 - 01:56] который возвращает название курса преподаватель а в унаследованными от него классе профессор нас также есть конструктор уже 4 параметров от имени возраста курса и название диссертации


Step 6 (S-10680) 4.png

[01:56 - 02:12] мы вызываем конструктор базового класса в данном случае конструкт передаем туда имя возраст и название курса и интересов например о класс профессор


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


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


Step 6 (S-10680) 5.png

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


[03:04 - 03:19] при помощи г + + а запустим выдалось


Step 6 (S-10680) 6.png

Step 6 (S-10680) 7.png

[03:19 - 03:37] просто вдруг таким образом действительно получается что мне тут name в конструкторе повел себя как ни верти видимо я теперь давайте посмотрим что еще позволит нам об этом коде узнать компилятор для + +


[03:37 - 03:53] компилятор можно запустить специальные опции а называется дам класс то есть мы попросим г + + вывести нам а


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


Step 6 (S-10680) 8.png

Step 6 (S-10680) 9.png

[04:11 - 04:27] ты помнишь откуда внутри этого файла находится информация о классах определенных внутри точно цепи и


Step 6 (S-10680) 10.png

Step 6 (S-10680) 11.png

[04:27 - 04:45] информация о их таблице виртуальных методов тут в том числе в информации во всех встроенных типов типы стандартный для тебя это мы пролетаем сам чтоб посмотреть сейчас которые нас интересуют она заинтересует часть против класса которые мы определили здесь можно посмотреть


Step 6 (S-10680) 12.png

[04:45 - 05:03] информацию о тех классах которые определялись например таблица виртуальных методов для класса хорошо что в таблице виртуальных методов для класса есть запись которая хранит адрес определенно удалась прошлым есть ячейку в которой хранится


Step 6 (S-10680) 13.png

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


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


[05:41 - 06:00] цепочка деструкторов не важно главное что здесь действительно не запись для инструкторов аналогично есть таблица виртуальных методов для производного класса тичер также есть 2 деструктора


Step 6 (S-10680) 14.png

[06:00 - 06:19] есть метод и копите так как внутри класса переопределяя метод то здесь в таблице виртуальных методов указан не тот из класса person так же есть реализация метода поэтому которой уже есть посетить шри собственно


Step 6 (S-10680) 15.png

Step 6 (S-10680) 16.png

[06:19 - 06:36] новый а виртуальный метод который объявлен в классический метод курс ну и последний раз которые бы определяли это класс профессор в таблице виртуальных методов для класса профессор также есть напечатать 2 деструктора есть метод


Step 6 (S-10680) 17.png

Step 6 (S-10680) 18.png

[06:36 - 06:54] метод моему уже переопределенный в классе профессора есть метод который также переопределить процесс профессор есть а мне этот курс унаследованный из класса тичер и есть метр стыдно сказать но ты мне тут уже определен только в классе профессора поэтому


Step 6 (S-10680) 19.png

[06:54 - 07:08] 10 собственно реализация находится вот таким образом можно каждый класс посмотреть какая у него таблица виртуальных методов посмотреть какие методы записано в этой таблице


Step 6 (S-10680) 20.png

Step 6 (S-10680) 21.png

[07:08 - 07:13] и даже как нибудь наверное информацию использовать