Step 4 (S-11076)

From Stepik Wiki
Jump to: navigation, search

Step on Stepik: https://stepik.org/lesson/561/step/4

Step 4 (S-11076) 1.png

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


[00:16 - 00:32] таким образом мы сможем локализовать то место в котором происходит нарушение диктаторов доступа давайте посмотрим как то использовать в нашем 1 примере с классами буфер примере мы определяли пластырем буфер дружественным


[00:32 - 00:50] стринг а теперь мы локализуем то место которым можно нарушать модификаторы доступа и сделаем дружественным только тот метод который непосредственно обращаемся к закрытым полям классов 3 дать вам придется ножка перемешать кот я сейчас объясню почему это происходит


[00:50 - 01:05] давайте начнем с конца посмотрим на определение классов 3 класса внутри него я должен объявить метод так думаю что для этого я пишу что дружественным для данного класса является метод


[01:05 - 01:22] класса string буфер из пишется полное имя метод но есть в натуре для того чтобы компилятор смог обработать данные строчку к этому моменту должно быть известно определения класса string буфер что здесь обращаюсь к методу объявленному внутри класса буфер


[01:22 - 01:40] для того чтобы компилятор мы должны определение классов буфер написать перед классом нарисовано высшим ну это необходимо потому что иначе просто определение посредником


[01:40 - 01:55] внутри определение классов буфер мы должны в том числе объявить метод опять которые принимают объем поставок


[01:55 - 02:12] но кастрена объявлен не определен пож поэтому для того чтобы данная строчка тоже скомпилировался нужно объявить класс стринг перед классом то год поэтому перед буфера действует объявления классов 3


[02:12 - 02:32] теперь давайте посмотрим а можем ли мы реализовать метод content прямо внутри класса оказывается что нельзя нам приходится здесь только объявлять этот нет почему потому что в этом месте класс string является только объявленным но не определен и поэтому если мы захотим обратиться к каким то парнем


[02:32 - 02:50] объекта типа стринг то компилятор не будет знать какие порядок этого объекта есть и в результате компиляции поэтому объявление нет это мы не сможем разместить определение нам придется разместить уже после того как станет известно определение классов поэтому определение


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


[03:08 - 03:25] и таким образом на этапе линковки подойдет ошибку потому что 1 и тот же метод будет иметь несколько тел и при этом он не будет объявлен как в данном случае нам перед методом нужно писать ключевое слово потому что этот метод определен не внутри класса а снаружи