Дружественный метод класса. ООП. friend c++ что это. Функции друзья. C++ Для начинающих. Урок#90

  Рет қаралды 82,969

#SimpleCode

#SimpleCode

6 жыл бұрын

Понравилось видео или оказалось полезным? Подпишись!
Поддержка канала
/ simplecode
Дружественный метод класса. friend c++ что это. Функции друзья. C++ Для начинающих. Урок#90
Конструктор класса пример. Зачем нужен. Конструктор с параметрами. Конструктор по умолчанию. Урок#78
goo.gl/tf4BQp
Ключевое слово this в ООП. Что означает. Что это такое. Для чего нужен this указатель C++ #81
goo.gl/oMFeqr
Определение методов вне класса. Вынести функцию в из класса. Вынести описание метода вне класса. #89
goo.gl/z9f6qx
Уроки по программированию
Наша группа ВК smplcode
Подписывайтесь на канал / @simplecodeit

Пікірлер: 128
@maksinima
@maksinima 5 жыл бұрын
От всех заочников низкий поклон автору!
@nightgames3158
@nightgames3158 2 жыл бұрын
Поддерживаю)👍
@SimpleCodeIT
@SimpleCodeIT 6 жыл бұрын
#дружественныйметод #дружественнаяфункция #ООП #SimpleCode #урокипрограммирования
@user-kw3ft8bc4t
@user-kw3ft8bc4t 5 жыл бұрын
даже не знаю как это понять по книге! Тут такой винегрет, который понял только посмотрев видос! спасибо
@viktort9326
@viktort9326 3 жыл бұрын
так автор неоднократно упоминает сходство с прототипами функций
@SimpleCodeIT
@SimpleCodeIT 6 жыл бұрын
Дружественный метод класса. friend c++ что это. Функции друзья. C++ Для начинающих. Урок#90
@user-sx4gr8uk5h
@user-sx4gr8uk5h 6 жыл бұрын
Visual Studio 2017 все равно не дает доступ к Private, даже если вынести метод.
@TheWladberlin
@TheWladberlin 4 жыл бұрын
@@user-sx4gr8uk5h У меня 2017 - все идет.
@TheWladberlin
@TheWladberlin 4 жыл бұрын
Есинственное чего я не понял, почему если Human класс описываю внизу под Apple, но объявляю "class Human;" выше над Apple - компилятор дает ошибку. Когда наоборот, как у Сергея, т.е. Human наверху над Apple, то все норм?
@redpassion6568
@redpassion6568 2 жыл бұрын
Почему бы просто не использовать сеттер?
@pavelios3577
@pavelios3577 6 жыл бұрын
Спасибо за урок, Сергей.
@berserkmotou1609
@berserkmotou1609 6 жыл бұрын
Спасибо что все разжевываете!!!
@user-sn9zx6et4g
@user-sn9zx6et4g 8 ай бұрын
у меня подгорело, что дружественный метод нужно сперва объявить в обоих классах, и в итоге определить его вообще вне класса ниже программы. Так еще и объявление классов нужно сделать, чтобы компилятор не терялся. Сишечка я тебя обожаю
@user-lv6dc1oi5v
@user-lv6dc1oi5v 4 жыл бұрын
Дай тебе Бог здоровья!) Каждый раз выручаешь!
@Ermine882
@Ermine882 6 жыл бұрын
Спасибо за урок
@alexgaran5339
@alexgaran5339 3 жыл бұрын
с каждым новым видео время просмотра становится меньше, а вот время на осмысление увеличивается кратно. Спасибо.
@user-lx5vv3uu8u
@user-lx5vv3uu8u 4 жыл бұрын
Сергей, спасибо!
@user-hz4ho1ox1q
@user-hz4ho1ox1q 4 жыл бұрын
Спасибо за знания!
@user-nw5iw5ew9z
@user-nw5iw5ew9z 3 жыл бұрын
Спасибо, Сергей. Большое спасибО!
@user-is7qv3fe8t
@user-is7qv3fe8t 6 жыл бұрын
Очень годно. Спасибо
@5111
@5111 4 жыл бұрын
Спасибо, от души!😍 Расскажи о себе, думаю я не один кому это интересно
@Antonov_Ivan.
@Antonov_Ivan. 8 ай бұрын
Спасибо за урок!
@sarduxis2978
@sarduxis2978 5 жыл бұрын
Спасибо за урок. У меня только один вопрос - когда я повторяю этот код 1:1 (friend void Human::TakeApple(Apple &apple) );то не могу получить доступ к переменным Private класса Apple. Переменные доступны только в случае, если я делаю дружественным класс Human целиком (friend class Human) . Пользуюсь VS 2013.
@vladimirdiadichev6140
@vladimirdiadichev6140 6 жыл бұрын
Спасибо
@user-fm4ni2mc8j
@user-fm4ni2mc8j 4 жыл бұрын
Огромное спасибо за Ваши уроки! Видимо три человека случайно промахнулись и поставили дизлайк вместо лайка!)
@SaffronChipMCPE
@SaffronChipMCPE 3 жыл бұрын
да не, это, наверное, его хейтеры, а их так мало~ P. S. такой вывод сделал увидев, что на прошлом уроке тоже было 3 дизлайка. раньше встречалось больше, но, может быть, начали осозновать свои ошибки)
@ISXOD
@ISXOD 3 жыл бұрын
Поддерживаю коментарием хороший и качественный контент
@jefffstone
@jefffstone 4 жыл бұрын
И переопределять функцию вне класса нужно ПОСЛЕ того класса, ссылку на который эта функция получает. Потому что если её расположить перед этим классом, то функция этот класс просто не увидит
@user-sh2pv2cb5b
@user-sh2pv2cb5b Жыл бұрын
Так это функция должна видеть класс. А у меня в голове чой-та наоборот. А есть ли где почитать за это?
@panschindler9370
@panschindler9370 4 жыл бұрын
Спасибо вам))
@mars0h0d
@mars0h0d 2 жыл бұрын
Спасибо за урок. Работает даже в последней VS 2022 (версия 17.0.5).
@user-tl6ol1tt9y
@user-tl6ol1tt9y 3 жыл бұрын
Всё-таки почему, если я описываю класс Human после Apple, он начинает выдавать ошибку, мол не могу обратиться к private свойствам класса Apple? Я же объявляю прототипы
@elenapushkina8800
@elenapushkina8800 6 жыл бұрын
Я только начал заниматся c++ и смотрю твои первые уроки:)
@SimpleCodeIT
@SimpleCodeIT 6 жыл бұрын
Успехов в изучении =)
@user-ll5dg6zm8d
@user-ll5dg6zm8d 2 жыл бұрын
@Naz Nezuke а ты не забросил?)
@user-ll5dg6zm8d
@user-ll5dg6zm8d 2 жыл бұрын
@Naz Nezuke харооош,а я вот уже полиморфизм изучаю) Сложноватенько,но пробъемся)
@benitezocastillo8079
@benitezocastillo8079 Жыл бұрын
@@user-ll5dg6zm8d ну и как там с плюсами?
@user-ll5dg6zm8d
@user-ll5dg6zm8d Жыл бұрын
@@benitezocastillo8079 хах,уже полгода как не программирую,знаю что звучит как отговорка,но вообще нету времени,школа ,11 класс… поступлю в Польшу на комп науки,и там уже и летом на джаву перейду и глубинно вольюсь (плейлист по плюсам я весь прошёл))
@user-ow3mq3nn3t
@user-ow3mq3nn3t 3 жыл бұрын
Лучшее объяснение данной темы. Автору большой поклон. Подключил платную подписку на SoloLern и целый час не мог понять что и как мне сделать. Посмотрел видео и за одну минуту закончил выполнение поставленной задачи. Ещё раз, большое спасибо!
@user-kb6qd8rg4g
@user-kb6qd8rg4g 4 жыл бұрын
спасибо
@user-ye7vc6ug1l
@user-ye7vc6ug1l 4 жыл бұрын
Спсб
@Salavat1k
@Salavat1k 4 жыл бұрын
Объявляю вначале оба класса, потом первым вверху стоит класс Apple, а ниже класс Human, в этом случае код перестанет работать. Если классы поменять местами, то код снова рабочий. Почему?
@TheWladberlin
@TheWladberlin 4 жыл бұрын
Аналогично!
@user-qw2xx6ef8r
@user-qw2xx6ef8r 3 жыл бұрын
Аналогично! Когда класс Human был внизу, в методе TakeApple не было доступа к полям класса Apple. Хотя я прописал сразу оба определения class Apple; и class Human;
@mortimershow3802
@mortimershow3802 3 жыл бұрын
та же проблема, никто не разобрался?
@jellyfish6042
@jellyfish6042 2 жыл бұрын
@@mortimershow3802 Так ребята и бросили учить программирование
@mortimershow3802
@mortimershow3802 2 жыл бұрын
@@jellyfish6042 просто перешёл на C#, херня этот с++
@mrgrigsey9641
@mrgrigsey9641 3 жыл бұрын
- На, мужик, яблоко! - Спасибо. - Спасибо на хлеб не намажешь. - Тогда забирай обратно! Вот, что будет, если между 'apple' и 'takeApple' реализовать class human.
@pavelios3577
@pavelios3577 5 жыл бұрын
Уважаемый Сергей, получается, что расположение классов влияет на работу метода. Не возникнут ли проблемы, когда и тех и других будет много? Спасибо за видео.
@DimaRadionov31
@DimaRadionov31 Жыл бұрын
Возникнут)
@something_amo
@something_amo Жыл бұрын
для этого классы и должны находиться в разных частях приложения, а не одном большом.
@Kokurorokuko
@Kokurorokuko 4 жыл бұрын
Я так понимаю ошибки возникают потому что компилятор требует, чтобы каждый класс был раньше другого описан, а это невозможно.
@irinanovak3882
@irinanovak3882 4 жыл бұрын
Дякую за урок
@user-bb7fg7yw7e
@user-bb7fg7yw7e Жыл бұрын
Сергей, добрый день! Смотрю активно ваши уроки и в один момент я себе задал вопрос :"А почему просмотры настолько сильно упали? Ранее было по 200 к.", говорю я к тому, что ваш контент очень полезный, не могу никак понять, как такое большое количество людей перестало его смотреть. Хочу вас поблагодарить за уроки, спасибо вам большое за такой большой труд!!!
@prostocrazy1105
@prostocrazy1105 Жыл бұрын
они сдались
@user-je4dm5oy1i
@user-je4dm5oy1i 10 ай бұрын
ты же понимаешь что сергей никогда не прочитает твой коммент, он бросил канал год назад, а даже если бы не бросил, он не стал бы проверять комметарии 4 летнего видео
@user-sh2pv2cb5b
@user-sh2pv2cb5b Жыл бұрын
Не устаю повторять на этом канале: Огромное спасибо за внятные уроки! Только замучался с областью видимости взаимозависимых классов. Пришлось и объявлять и определять классы выше main, иначе не работало, и то порядок оказался важен (лишь определение дружеского метода можно разместить ниже) Будьте добры, граждане/господа/товарищи/сеньеры, есть ли где разъяснения по этой теме? Мне кажется это изврат какой-то, столько кода над main, будь классы помасштабнее, так ваще
@wasony.126
@wasony.126 4 жыл бұрын
Фарш 😲👍👍👍👍
@DPRKfan
@DPRKfan 6 жыл бұрын
Спасибо большое за хороший урок P.S. 8:52 Может быть лучше использовать header file, чтобы избежать подобных проблем?
@TheWladberlin
@TheWladberlin 4 жыл бұрын
лучше. Но мы header еще не изучали.
@user-jb7ev6tm5e
@user-jb7ev6tm5e 4 жыл бұрын
Добрый день. Сделал все так же , как в ролике, ради интереса решил поменять местами классы, сначала Apple , потом Human и перестает работать (перед классом Apple написал class Human; ) Меняю обратно местами - работает, в чем тонкость , подскажите , пожалуйста?.
@user-nw5iw5ew9z
@user-nw5iw5ew9z 3 жыл бұрын
Такая же фигня
@alexgaran5339
@alexgaran5339 3 жыл бұрын
почему-то отладчик не хочет раскрывать секреты) Мне кажется, это потому, что когда компилятор натыкается на какую-то функцию или класс, он начинает собирать/искать информацию снизу вверх. И когда компилятор попадает из мейна в Эйпл, он, перед тем как перепрыгнуть в Хьюман, собирает данные с "weight" и "color", а затем попадает в Хьюман (который перенаправляет его в функцию вывода). В противном случае, эйпл оставить выше хьюмана, хьюман перенаправит компилятор прямиком в фунцкию вывода информации, не собрав предварительно данные с "weight" и "color". Могу ошибаться - поправте меня.
@notFearnir
@notFearnir 2 жыл бұрын
Разобрались? У меня есть мысль по поводу этого. скорей всего это происходит из-за того, что мы должны сначала объявить функции в классе Human, и уж потом в классе Apple мы делаем функции дружественными. т.е. Если мы ставим выше в приоритете класс Apple, то в нём компилятор пытается сделать дружественными функции, которые ещё не объявлены - получаем ошибку.
@tishegrad
@tishegrad 3 жыл бұрын
Урок, конечно, очень крутой, но я в своей 2019 студии не могу, почему-то, сделать дружественный метод. Хотя, всё делаю, как в видео.
@user-wi6cg2ii9o
@user-wi6cg2ii9o 3 жыл бұрын
Дело не в студии. Поменяй классы местами(описание в коде).
@temshik.invalid
@temshik.invalid 3 жыл бұрын
4:50
@user-ef6ow2ld6z
@user-ef6ow2ld6z 2 ай бұрын
Спасибо за уроки. По данному уроку вопрос...если в коде поменять местами классы Human и Apple, то доступ к полям color и weight опять закрыт. Это тоже особенность плюсового компилятора?
@notnormal7827
@notnormal7827 28 күн бұрын
Нет это не его особенность это так работает просто :D, но вот методы в public все доступны
@lennoxmacduff2037
@lennoxmacduff2037 6 жыл бұрын
Мда. Забавная работа компилятора. Спагетти-код на спагетти-коде сидит и спагетти-кодом погоняет)) А уроки клёвые
@marksmith1883
@marksmith1883 5 жыл бұрын
При выносе метода за функцию main(), компилятор предлагает встроить его с помощью inline. Вот так inline void Human::TakeApple(Apple & apple){"""""""}. На работу программы не влияет, в чем будет разница?
@marksmith1883
@marksmith1883 5 жыл бұрын
Благодарю.
@gavyttop1341
@gavyttop1341 2 жыл бұрын
@@marksmith1883 незашо
@ylikitishnik1946
@ylikitishnik1946 3 жыл бұрын
топ!
@misha2993
@misha2993 Жыл бұрын
У меня не работает код. Точно также всё ввел, но, если класс Humen перенести ниже класса Apple, то код не работает Я как положено в самом верху написал: class humen; Но это не помогает
@besikimeladze4374
@besikimeladze4374 4 жыл бұрын
1000 :)
@VKohai_vk
@VKohai_vk 4 жыл бұрын
Apple(int weight, string color) { this->weight = weight; this->color = color; }
@gez9796
@gez9796 12 күн бұрын
это ужас... я не могу так сделать, потому что, чтобы можно было ссылку получить в функцию, нужно обязательно определить класс, на объект которого ссылаются(apple должен быть выше). И при этом нужно все таки human определить выше, чтобы объявить в apple о дружественности функции из human. В обоих случаях компилятор не устраивает просто объявленный класс, он должен быть обязательно определен(просто прототип нельзя) Ну а переопределять тоже нельзя, только один раз тело класса можно написать. В общем вынесение функции не помогает, ведь есть еще две проблемы... нерешаемые(((((
@ivanliaz
@ivanliaz 3 ай бұрын
Получается что если класс использует метод другого класса, то этот класс (который использует) должен быть объявлен между классом (которому принадлежит метод) и определением этого метода? Зачем такие заморочки в срр...
@user-ys6rz8sm1i
@user-ys6rz8sm1i 5 жыл бұрын
as
@LenTos1337
@LenTos1337 6 жыл бұрын
Какие-то блин костыли приходится вставлять, чтобы компилятор с++ понял что от него хотят, не понятно только. почему это именно так работает? Сначала надо объявить класс Human, потом apple, и только потом после main'a вынести этот дружественный метод. Вообще не могу понять. И почему это всё не работает, если мы изначально не вынесем class Apple;? Совсем не понятна мне эта логика компилятора
@user-yn7gi6os8d
@user-yn7gi6os8d 2 жыл бұрын
Наоборот, мы сначала должны объявить class Apple, а затем class Human, ибо внутри Human есть обращение к классу Apple, о котором компилятор ещё даже не догадывается.
@SaffronChipMCPE
@SaffronChipMCPE 3 жыл бұрын
вот я и дошёл ло до второго стрима :)
@gans0072
@gans0072 10 ай бұрын
пожалуйста подскажите. почему нельзя классы из ролика поменять местами? понимаю для тех кто разобрался вопрос глупый может быть. но я действительно хочу понять почему работает только в такой последовательности классов.
@gans0072
@gans0072 8 ай бұрын
@@Empty_line неа... Я так и не понял от какого условия зависит последовательность, Так что, метод проб и ошибок, и интернет. Если будет что-то не работать, помнить про это условие
@user-ev4tk1jc4g
@user-ev4tk1jc4g 2 жыл бұрын
Каждый урок я конспектировал, но тут скажу честно, задумался на счёт шлангования, слоёнка жуткая, спасибо за урок
@gavyttop1341
@gavyttop1341 2 жыл бұрын
шлангирование??? что это
@oljaolsa7261
@oljaolsa7261 4 жыл бұрын
Yourclass b; b.Taceapple(apple); ????? Error C2065 'apple': undeclared identifier Project30 C:\Users\Оксана\source epos\Project30\Project30\Source.cpp 33
@rence2972
@rence2972 4 ай бұрын
Интересно. что же скрыто с 9 по 253 строчку )
@user-uj4gr9ql4m
@user-uj4gr9ql4m Жыл бұрын
wheit :D
@ananas6000
@ananas6000 11 ай бұрын
именно
@Viamsupervadetvadens
@Viamsupervadetvadens 6 жыл бұрын
up
@ne_strashno
@ne_strashno Жыл бұрын
В мене проблема з компіляцією коли я роблю опреділення методу і виношу його то нічого не змінюється залишаються ті самі помилки chat GPT теж в шоці пише типу тут просто потрібно std i string підключити але вони і так в мене підключені. Що за прикол підкажіть
@deniskozak5997
@deniskozak5997 6 жыл бұрын
Почему если сначала расположить класс Human, то программа не будет работать, а если наоборот Apple сперва, то все заработает? Вот так не работает: class Human; class Apple { friend void Human::TakeApple(Apple &apple); private: int weight; string color; public: Apple(int weight,string color) { } }; class Human { public: void TakeApple(Apple &apple) { } }; Вот так работает: class Apple; class Human { public: void TakeApple(Apple &apple) { } }; class Apple { friend void Human::TakeApple(Apple &apple); private: int weight; string color; public: Apple(int weight,string color) { } };
@user-rm3eu6we8c
@user-rm3eu6we8c 6 жыл бұрын
потому что ты в Apple указываешь френдовую функцию friend void Human::TakeApple(Apple &apple); которая ещё не определена в классе Human,
@TheWladberlin
@TheWladberlin 4 жыл бұрын
@@user-rm3eu6we8c А для чего мы тогда "class Human;" вверху объявляем?
@gavyttop1341
@gavyttop1341 2 жыл бұрын
@@TheWladberlin там вроде надо учитывать какие функции куда обрашаются
@user-tr6mf1ps5n
@user-tr6mf1ps5n Жыл бұрын
+++++
@vitalavgust3919
@vitalavgust3919 4 жыл бұрын
Деструктор к конструктору не надо прописывать?
@user-hs6oq6gc7v
@user-hs6oq6gc7v 4 жыл бұрын
деструктор нужно описывать когда надо выделенную память очистить.....а в данном случае память даже не выделена
@vitalavgust3919
@vitalavgust3919 4 жыл бұрын
@@user-hs6oq6gc7v СПАСИБО
@user-hs6oq6gc7v
@user-hs6oq6gc7v 4 жыл бұрын
@@vitalavgust3919 не за что
@l_101_l
@l_101_l 3 жыл бұрын
ааааа А ведь просто читал про классы ъ
@oljaolsa7261
@oljaolsa7261 4 жыл бұрын
почему код не работает? вроде все, как у автора видео.. #include #include using namespace std; class Yourclass; class Myclass; class Yourclass { public: void Taceapple( Myclass& apple); }; class Myclass { private: int weihgt; string color; public: Myclass(int weihgt, string color) { this->weihgt = weihgt; this->color = color; } friend void Yourclass::Taceapple( Myclass &apple); }; int main() { Myclass a(100, "red"); Yourclass b; b.Taceapple(apple); return 0; } void Yourclass::Taceapple( Myclass& apple) { cout
@oljaolsa7261
@oljaolsa7261 4 жыл бұрын
cout
@vlaszaev3194
@vlaszaev3194 4 жыл бұрын
@@oljaolsa7261 b.Taceapple(apple); -> b.Taceapple(a);
@geoleb8106
@geoleb8106 Жыл бұрын
Даже у классов могут быть друзья-функции. А у меня нет :- (
@alexs7618
@alexs7618 Жыл бұрын
И у тебя могут ;)
@DwarfBormotun
@DwarfBormotun 5 жыл бұрын
Я подумал, что один класс будет Apple, а другой - pen... )))
@akionka
@akionka 5 жыл бұрын
I have a pen. I have an apple. Ahhh! Applepen xD
@MixShow300
@MixShow300 3 жыл бұрын
Нельзя просто пользоватся сеттерем?
@user-ho7db5oz8d
@user-ho7db5oz8d Жыл бұрын
ты думаешь в таком виде будешь использовать такое?))) ну ты смешной тебе это для понятия дали когда начнешь пис ать задачки для усвоения там тебе пригодится для кода на 1000 строк с условиями проектного написания где твой код убдут смотреть и пользоватся дургие
@mikesteinar2713
@mikesteinar2713 3 жыл бұрын
У мене ця хрінь не працює абсолютно ні в якому вигляді. Доведеться з цим жити. update: допомогло визначення дружнім усього класу повністю.
@user-sd6wq1dy5i
@user-sd6wq1dy5i 5 жыл бұрын
вес по английски weight
@evgenykonovalov4870
@evgenykonovalov4870 2 жыл бұрын
НЕТ доступа к полям apple=( все делаю как в видео
@evgenykonovalov4870
@evgenykonovalov4870 2 жыл бұрын
в классе human объявил метод takeappple , а вне класса human добавил реализацию void Human::takeapple(Apple &a){ a.weight=140; cout
@evgenykonovalov4870
@evgenykonovalov4870 2 жыл бұрын
Тот момент когда смотришь видео, делаешь, не получается +) находишь решение, потом смотришь видео дальше, а там как раз эта же дичь, которую автор показывает как победить) потрачено час на поиск решения ) но не зря, запомнил лучше.
@evgenykonovalov4870
@evgenykonovalov4870 2 жыл бұрын
ну и сам с собой пообщался )
@abstergo72
@abstergo72 2 жыл бұрын
@@evgenykonovalov4870 Бля, жиза. Спасибо за твой коммент, а то искал бы вечно
@Ann_Askerova
@Ann_Askerova 2 жыл бұрын
@@evgenykonovalov4870 😅
@internalreadonlyvoid5283
@internalreadonlyvoid5283 3 жыл бұрын
с++ не очень в роли языка для ООП. что курили разрабы всего этого?
@tftyyghfghfghf3125
@tftyyghfghfghf3125 3 жыл бұрын
язык Си ))
@tupoy_ytub_uberi_psevdonim
@tupoy_ytub_uberi_psevdonim 2 жыл бұрын
сложно, допустил ряд глупых ошибок синтаксиса. потратил на поиск больше времени чем на написание
@user-hb7er4ff9u
@user-hb7er4ff9u 2 жыл бұрын
спасибо
Miracle Doctor Saves Blind Girl ❤️
00:59
Alan Chikin Chow
Рет қаралды 70 МЛН
Backstage 🤫 tutorial #elsarca #tiktok
00:13
Elsa Arca
Рет қаралды 28 МЛН
Собеседование Junior C++
45:32
Ambushed Raccoon
Рет қаралды 98 М.
Miracle Doctor Saves Blind Girl ❤️
00:59
Alan Chikin Chow
Рет қаралды 70 МЛН