Step 4 (S-11076)
Step on Stepik: https://stepik.org/lesson/561/step/4
[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 и тот же метод будет иметь несколько тел и при этом он не будет объявлен как в данном случае нам перед методом нужно писать ключевое слово потому что этот метод определен не внутри класса а снаружи