Указатель на функцию в качестве параметра. Передача функции в качестве параметра. С++ Урок #65

  Рет қаралды 172,950

#SimpleCode

#SimpleCode

6 жыл бұрын

Понравилось видео или оказалось полезным? Подпишись!
Указатель на функцию в качестве параметра. Передача функции в качестве параметра. С++ Урок #65
Уроки по программированию
Наша группа ВК smplcode
Подписывайтесь на канал / @simplecodeit

Пікірлер: 270
@CoolbitsVDA
@CoolbitsVDA Жыл бұрын
Стадии просмотра данного видео: 0:00 Интересно что там у нас сегодня? 1:58 Опять указатели. Кто-то на кого-то указывает, в голове каша. 9:23 Вроде все понятно. Только зачем мне указатель на функцию, если я могу вызвать функцию напрямую? 18:58 Это ахрененно!!!! В очередной раз, спасибо огромное, Сергей!
@wlepnoga
@wlepnoga 6 жыл бұрын
Самый внятный канал о С++!
@brycencesar6273
@brycencesar6273 2 жыл бұрын
Instablaster
@user-or1hy4xz8u
@user-or1hy4xz8u 2 жыл бұрын
@@brycencesar6273 что это? канал?
@sanpaul3057
@sanpaul3057 2 жыл бұрын
@@user-or1hy4xz8u а самому проверить не пробовал?
@satyrosa
@satyrosa Жыл бұрын
Готовлюсь к собеседованию. Впервые слышу об этом. 4 года в универе. 2 самостоятельных проектов. И такое не в первый раз, спасибо!!
@francheeze
@francheeze 10 ай бұрын
И как?
@satyrosa
@satyrosa 10 ай бұрын
@@francheeze неудачно, но подозреваю, что это просто неуверенность. Плюс ещё с математикой налажала
@francheeze
@francheeze 10 ай бұрын
@@satyrosa Это печально
@pavel_losev
@pavel_losev 10 ай бұрын
​@@francheezeа что было в самостоятельных проектах не секрет?
@francheeze
@francheeze 10 ай бұрын
@@pavel_losev ?
@user-eo7if4vd3h
@user-eo7if4vd3h 6 жыл бұрын
сначала послышалось калек а не КОЛЛЕГ но по смыслу подходить)))
@yaroslavvdovenko3482
@yaroslavvdovenko3482 6 жыл бұрын
Еще не встречал настолько крутых обучалок😊😊
@user-mykyta_vyshniakov
@user-mykyta_vyshniakov 4 жыл бұрын
Data from Astral - повеселило )))) Спасибо за уроки!
@korvax_goblin
@korvax_goblin 2 жыл бұрын
Математическое описание состояния энергетики
@setwindowlongptr
@setwindowlongptr 2 жыл бұрын
что такое astral
@MirrorOfLourence
@MirrorOfLourence Жыл бұрын
@@setwindowlongptr Астрал и есть. Т.е., полагаю, данные, взятые с потолка)
@user-qe9jz3bj2j
@user-qe9jz3bj2j 4 ай бұрын
Сергей, я безмерно благодарен вам за ваши уроки! ваш уровень объяснения, превосходен! абстрагирован настолько, что даже самые сложные темы познаются как 2+2
@bama2619
@bama2619 2 жыл бұрын
Удобный инструмент! Спасибо. И почему я раньше не смотрел ваш канал? Как заработаю копеечку обязательно закину донат! Народный учитель должен жить хорошо. Большая помощь обществу.
@Dmitrii82
@Dmitrii82 3 жыл бұрын
Весь интернет перелопатил нихрена не понял, только вы можете объяснить доходчиво. Громадное спасибо
@user-tl9qe9hg5s
@user-tl9qe9hg5s 4 жыл бұрын
Концовочка урока порадовала - данные из астрала))) Но зато всё прекрасно понятно) Спасибо за уроки!
@zumaxrussia
@zumaxrussia 5 жыл бұрын
Спасибо Сергей. Добротное видео. Как в прочем всегда.
@archiechellaut9483
@archiechellaut9483 2 жыл бұрын
Большое спасибо вам за урок и прекрасное пояснение, Сергей!
@amd3s
@amd3s 6 жыл бұрын
Хм, реально крутая фишка! Спасибо.
@sashatim8244
@sashatim8244 6 жыл бұрын
Круть, 3 месяца изучаю C++ и впервые узнал об указателе на функцию.
@Ermine882
@Ermine882 6 жыл бұрын
Как всегда спасибо за урок и оперативность.
@user-gs5fp7xq9k
@user-gs5fp7xq9k 4 жыл бұрын
Я Вас благодарю за Вашу работу, очень хорошо всё объясняете!
@vadimturok59
@vadimturok59 3 жыл бұрын
Автора и по голосу приятно слушать и розжевывает все до мелочей, спасибо!
@somebuddy1202
@somebuddy1202 4 жыл бұрын
Огромное спасибо! Очень наглядно и без воды.
@user-hk8sh7zb4c
@user-hk8sh7zb4c 5 жыл бұрын
Спасибо тебе за твой труд, дружище!
@user-sy3uo4ki6v
@user-sy3uo4ki6v 5 жыл бұрын
Очень просто и понятно. Спасибо вам!)
@user-nw5iw5ew9z
@user-nw5iw5ew9z Жыл бұрын
Спасибо, Сергей. Как всегда познавательно
@LenTos1337
@LenTos1337 6 жыл бұрын
Спасибо вам большое за урок
@user-hz4ho1ox1q
@user-hz4ho1ox1q 4 жыл бұрын
Спасибо за знания !
@danilapechenkin1102
@danilapechenkin1102 2 жыл бұрын
Спасибо! Помогаете!!!
@slimbdeful
@slimbdeful 6 жыл бұрын
Очень важная тема!
@timurortskhanov8527
@timurortskhanov8527 6 жыл бұрын
Наиогромнейшее СПАСИБО. Вы СУПЕР.
@SimpleCodeIT
@SimpleCodeIT 6 жыл бұрын
Пожалуйста!
@user-hq4qi1mt4o
@user-hq4qi1mt4o 5 жыл бұрын
Очень крутой урок, спасибо большое!
@stensej6841
@stensej6841 4 жыл бұрын
спасибо Сергей!
@antandgen
@antandgen 6 жыл бұрын
Сергей, добрый день! Во первых хочу поблагодарить Вас за ваш ТРУД, реально очень помогает в освоении С++. У меня огромная просьба. Просьба такая, подскажите как параллельно с изучением С++, еще практически закреплять пройденный материал. Пример: Ваши уроки это ТЕОРИЯ и бывает так, что для полного понимания хочется ПРАКТИКИ, но в силу не большого багажа знаний сложно практиковаться, но практиковаться НАДО. Есть три урока как создать игру "Змея" на основе С++, очень помогло понять до конца как работают функции, ОЧЕНЬ ПОМОГЛИ ВАШИ УРОКИ,может у Вас есть практические уроки для полного понимания. Спасибо.
@dmax8622
@dmax8622 5 жыл бұрын
Вопрос конечно не мне , но отвечу, так как меня это тоже интересовало. Есть две отличные книги : "Сборник задач по программированию" Д.М.Златопольский и "Сборник задач в примерах" Н.Культин. Д.М. Златопольский хорош тем что, все его задачи, в каждом разделе, начинаются с элементарно легких, и ПОСТЕПЕННО усложняются до максимум сложности. А вот Н.Культина, ко всем задачам, в разделах, есть решения. Ну вот как-то так. PS. Лично мне больше нравится "Сборник задач по программированию" Д.М.Златопольского, мне он ОЧЕНЬ ПОМОГ в изучении С++.
@avamnepohui7260
@avamnepohui7260 5 жыл бұрын
@@dmax8622 Заодно можно подучить и то, что в школе было успешно прогуляно или забыто))
@ubermenschliche1319
@ubermenschliche1319 4 жыл бұрын
Andrey A На канале есть домашние задания по с++
@user-bh2sz9tz6f
@user-bh2sz9tz6f 4 жыл бұрын
@@dmax8622 Спасибо большое,то что надо!
@user-te9dr5jf3e
@user-te9dr5jf3e Жыл бұрын
@@dmax8622 Спасибо
@user-ny4zk7gj7n
@user-ny4zk7gj7n 4 ай бұрын
Смотрю и радуюсь! Предельно ясно и понятно, в самый раз для чайника))))
@sardorkhuja
@sardorkhuja 4 жыл бұрын
Очень понятно все объяснил, спасибо
@staspineapple6962
@staspineapple6962 4 жыл бұрын
Весьма доволен собой был до поры до времени:D
@Ank2929
@Ank2929 Жыл бұрын
Вы первый человек, которому удалось объяснить мне пользу указателей
@kvizyx636
@kvizyx636 2 жыл бұрын
Большое вам спасибо!)
@itstudio3107
@itstudio3107 2 жыл бұрын
Спасибо за наглядный пример. Хотя, мне кажется, стоило пример отрисовать в пэинте - так нагляднее. Я прям чувствую, что понял смысл лишь на половину. Но в любом случае огромное спасибо и за пример, и за урок!
@user-wo1dx1rz4z
@user-wo1dx1rz4z 6 жыл бұрын
Спасибо!
@nap0le0nb0naparte7
@nap0le0nb0naparte7 6 жыл бұрын
Круто!!!
@Firuz26
@Firuz26 6 жыл бұрын
Спасибо
@learning4702
@learning4702 Жыл бұрын
Спасибо за видео, узнал для себя новую возможность С++)
@ANDRUSHKAGAMING228
@ANDRUSHKAGAMING228 5 жыл бұрын
Спасибо, толково ))
@SeshAlex
@SeshAlex 6 жыл бұрын
Спасибо за урок! Предвкушаю как я сейчас буду издеваться над указателями, может че и придумаю:)
@chausovanton
@chausovanton 4 жыл бұрын
Во первых, Огромный респект за канал! Такой вопрос: Зачем использовать указатель на функцию, если примерно такого же эффекта можно добиться вот так: string DataFromBD() { return "Data From BD"; } void ShowInfo(string str) { cout
@user-or1hy4xz8u
@user-or1hy4xz8u 2 жыл бұрын
указатели позволяют экономить память.
@randorteam3122
@randorteam3122 2 жыл бұрын
ставлю лайк, спасибо за ваши уроки)😀
@maksinima
@maksinima 5 жыл бұрын
И как я мог пропустить такой важный урок?? Спасибо вам большое!
@VideobufferGoPro12-kn2ok
@VideobufferGoPro12-kn2ok Ай бұрын
Даже коммент напишу, очень качественно объяснено👍👍👍
@user-fm4up1nb3n
@user-fm4up1nb3n 5 ай бұрын
крутая вещь, спасибо.
@user-ye4je7zf4o
@user-ye4je7zf4o 2 жыл бұрын
лучший, огромное спасибо
@bulba1995
@bulba1995 2 жыл бұрын
Классная штука , нужно по практиковаться.
@shahriyorturayev311
@shahriyorturayev311 Жыл бұрын
eng zo`r kanal sizga rahmat
@gagikarakelyan6014
@gagikarakelyan6014 4 жыл бұрын
Спасибо.
@melmenx
@melmenx 5 жыл бұрын
Я понял это так. Есть несколько функций. Чтобы вызвать одну нам необходимо создать функцию, параметром которой является указатель на функцию. void ShowFun(string(*pFoo)()) // функция, параметром которой является указатель на функцию { cout
@BortMechanick
@BortMechanick 6 жыл бұрын
спасибо за урок
@SimpleCodeIT
@SimpleCodeIT 6 жыл бұрын
Пожалуйста! =)
@hackerman5984
@hackerman5984 3 жыл бұрын
@@SimpleCodeIT Спасибо за урок,с помощью вас я наконец-то смог программировать на С++. Пересматриваю ваши ролики.
@user-pm5kv1xj3x
@user-pm5kv1xj3x 2 жыл бұрын
@@hackerman5984 Работаете программистом?
@arzamas1988
@arzamas1988 5 ай бұрын
Я постоянно юзаю указатеди на функци в машине состояний. Есть энамы, описывающие события и текущее состояние. Есть двойной массив, который содержит указатели на функции. Комбинацией значений событие и текущее_состоянте формируется индекс (x и y) и выбирается нужная функция. Коряво объяснил. Но инструмент очень удобный.
@kadyshev2759
@kadyshev2759 5 жыл бұрын
9:55 Трудно представить *Спасибо за урок*
@user-zc6pd7jr3i
@user-zc6pd7jr3i 3 жыл бұрын
Ахахаха..хах..кхак...ааа...аа...ааа.../всхлипы/
@NoRussiaNoCry
@NoRussiaNoCry Жыл бұрын
Як нечакана і прыемна было даведацца, што аўтар гэтага выдатнага каналу з роднай Украіны... Дзякуй вялікі за працу і трымайцеся, сябры!
@user-te9dr5jf3e
@user-te9dr5jf3e Жыл бұрын
Частенько встречаю талантливых прогеров из Украины. Не так давно один мой друг, переехал в Канаду и теперь работает там. Видимо тоже не плохой специалист.
@user-th4ws1cq4c
@user-th4ws1cq4c Жыл бұрын
Интересный у тебя ник). Раз ты так переживаешь за свою родину, то че на фронте-то не защищаешь ее? Или у тебя "активная" политическая позиция только в интернете? Хотя может тебя уже мобилизовали и ты сейчас лежишь-гниешь в поле где-нибудь под Артемовском...
@illiahimself
@illiahimself 4 ай бұрын
@@user-th4ws1cq4c ты еблан? это беларуская мова
@user-xm5zl9up4r
@user-xm5zl9up4r Ай бұрын
Cпасибо
@user-jw2jo4wy5s
@user-jw2jo4wy5s 4 жыл бұрын
Ёлки-палки. Смотрел многопоточное программирование, а там сказали какой-то урок про лямбду посмотреть для понимания. Стал смотреть про лямбду, там сказали посмотреть про полиморфную обертку. В полиморфной обертке отправили сюда и еще куда-то про цикл foreach... Короче, обход дерева в глубину
@user-jw2jo4wy5s
@user-jw2jo4wy5s 4 жыл бұрын
Линейный список. (как открыть ларёк): ...через 2 дня пришел. Сказали, я слишком худой - надо пойти поесть, чтобы 2 дня не есть, чтоб потом сдать кровь, чтоб жизнь страховать, чтоб прийти в банк, чтоб прийти в ЗАГС, чтоб пойти в ЖЭК, чтобы пойти в УВД, чтоб пойти в МОСГОСТРАНС, чтоб пойти в УПРАВУ, чтоб пойти в БТИ, чтоб пойти в ФНС, чтобы открыть ларёк...
@abdussattarkassymbekov3643
@abdussattarkassymbekov3643 3 жыл бұрын
забавная ситуация)
@SimpleCodeIT
@SimpleCodeIT 6 жыл бұрын
#указательнафункцию #SimpleCode #урокипрограммирования
@user-wx4bw7kl3n
@user-wx4bw7kl3n 4 жыл бұрын
Тут можно и без указателя обойтись. В функцию ShowInfo можно тупо передать функцию...
@andreysholmin5863
@andreysholmin5863 4 жыл бұрын
@@user-wx4bw7kl3n Я тоже так попробовал, получилось и тогда вопрос, в чем различие указателя на функцию и без указателя передача функции?
@user-wx4bw7kl3n
@user-wx4bw7kl3n 4 жыл бұрын
Андрей Шолмин, у меня такой же вопрос. Тут либо накосячил автор ролика, либо есть некая принципиальная разница, которую мы поймём в будущем. Я снова пока забросил Си++... Я к нему периодически возвращаюсь... Но если вы раньше меня поймёте, оставьте комментарий прямо здесь... Сохраните ссылку на видео для этого, да и на комментарий тоже...
@vovadenys4149
@vovadenys4149 4 жыл бұрын
​@@andreysholmin5863 передавая функцию компилятор не лично ее передает а создает ее копию и тогда у вас 1 функция занимает в 2 раза больше памяти (функция и копия). А передавая по указателю вы как бы на прямую работаете с функцией. Вроде как то так) поправте если чо
@vovadenys4149
@vovadenys4149 4 жыл бұрын
@@user-wx4bw7kl3n передавая функцию компилятор не лично ее передает а создает ее копию и тогда у вас 1 функция занимает в 2 раза больше памяти (функция и копия). А передавая по указателю вы как бы на прямую работаете с функцией. Вроде как то так
@user-nq7zw4gx4m
@user-nq7zw4gx4m Жыл бұрын
Очень класные видео спасибо за контент
@Blade_Ruiner
@Blade_Ruiner 2 жыл бұрын
Код становиться чище, но все равно необходимо написать так же условие передачи функции. =) Но так код хоть оптимизирован
@verbof2527
@verbof2527 2 жыл бұрын
Круто, полиморфизм в процедурном стиле)
@aleksandercross5936
@aleksandercross5936 5 жыл бұрын
Спасибо, сижу блин в академии тема: Лямбда выражения, препод как-то поверхностно объяснил. Вот сначала посмотрел про указатели на функции)
@donrumata5299
@donrumata5299 5 жыл бұрын
Полезная функция
@sixaxisization
@sixaxisization Жыл бұрын
Так они все возвращают string....в качестве аргумента суем string и все... Нет? showInfo(string str){cout
@lossofsoul3693
@lossofsoul3693 2 ай бұрын
DataFromAstral это сильно :))) Мой универсальный препод по программированию все время называл тестовые переменные doloto1, doloto2... :)
@lossofsoul3693
@lossofsoul3693 2 ай бұрын
string GetDataFromAstral(double mercuryPosition) { return DoMagic(mercuryPosition) }
@user-te9dr5jf3e
@user-te9dr5jf3e Жыл бұрын
Ожидал, что пример будет по функции rand(); Мне кажется она реализована по тому же принципу и ссылается видимо на srand(); учитывая что вторая расширяет функционал первой.
@Kopatych69
@Kopatych69 3 жыл бұрын
Неплохо было б подать в качестве аргумента массив указателей на функцию и последовательно исполнять их.
@vandyke2035
@vandyke2035 4 жыл бұрын
Приведено 2 варианта реализации: 1й Вариант - определяет ссылку на функцию, и нет возможности в эту ссылку добавить реализацию через {} - к примеру то же действие вывода на экран - cout, 2й вариант - в конце - создает функцию в которой есть своя реализация внутри { cout...} с вызовом по ссылке функций Data..., однако, без возможности передачи параметров. Вообщем не не вижу для себя удобства - так как если создавать свою функцию, то зачастую нужно передавать параметры в вызываемые по ссылке функции. А если мы внутри main создаем эту конструкцию - то тогда и ссылок ненадо - прямые обращения к функциям быстрее и короче
@danielvladimirov7077
@danielvladimirov7077 2 жыл бұрын
Van Dyke, полностью согласен! Реализовать 2 вариант с передаваемыми параметрами можно , но супер не удобно. Так что по сути ваше утверждение полностью верно, намного быстрее и читабильнее вывести функцию напрямую.
@mannas273
@mannas273 4 жыл бұрын
чет я встярл с этими указателями. понимаю вроде , а потом все исчезает из памяти
@Viktor_Kardakov
@Viktor_Kardakov Жыл бұрын
Со второго раза понял о чём речь, спасибо!
@Empty_line
@Empty_line 11 ай бұрын
С начала он говорит что указатель на функцию не требует начальной инициализации а потом делает это😶
@aln9391
@aln9391 6 жыл бұрын
Я в своё время сформулировал для себя, что имя функции это её метка или адрес. Вызов через косвенную адресацию.
@user-do3pm9yu3c
@user-do3pm9yu3c 5 жыл бұрын
Читайте Подбельского... там все тоже самое из прошлого века. Ну и скажу что это очень давно придумано в С++ (на самом деле использовано в с++ как и ООП) как и многое другое... Указатели на функции очень круто использовать для меню... поспорил как-то в прошлом веке кто напишет определенное меню на с++ или визуал бейсик.. типа.... я чуть ли не в блокноте на с++ напишу меню... либо среда визуал бейсик (с подсказками). на один день опоздал... проиграл спор (три дня на задачу вне работы.) Но я показал оппоненту... что как за пять минут расширить функционал меню за счет указателей на функции, когда ему пришлось бы тоже самое сделать опять за три дня... с тех пор началась моя любовь к с++.
@user-fm4ni2mc8j
@user-fm4ni2mc8j 4 жыл бұрын
Вернулся пересмотреть после видео с абстрактными классами :)
@user-lx7eo9dl8g
@user-lx7eo9dl8g 6 жыл бұрын
Спасибо за уроки. А работа с файлами будет?
@SimpleCodeIT
@SimpleCodeIT 6 жыл бұрын
будет
@ide9827
@ide9827 11 ай бұрын
автор красавчик неимоверный ура
@Empty_line
@Empty_line 11 ай бұрын
С начала он говорит что указатель на функцию не требует начальной инициализации а потом делает это😶
@ide9827
@ide9827 11 ай бұрын
@@Empty_line в любом случае, раньше я не знал про это вообще ничего, а теперь знаю что такая штука в принципе существует и смогу ей воспользоваться на плюсах при необходимости это круто
@alexxxusxxi
@alexxxusxxi 5 жыл бұрын
Для закрепления материала Массивы указателей на функции. Обычные и динамические. Чтобы усложнить задачку функция, передаваемая в виде аргумента в другую функцию, так же принимает параметр. В конечном итоге передача указателя на функцию в качестве параметра другой функции в цикле из массива таких указателей :) Внизу есть пара вопросов, буду признателен, если получу на них ответ. #include #include using namespace std; // функции, которые я буду использовать в качестве примера string GetDataFromDB(string DBName) { return "Data From DB: " + DBName + " ----------- " + "Record1 Record2 Record3 ... ... ... RecordsN "; } string GetDataFromWebServer(string ServerName) { return "Data From WEB-Server: " + ServerName + " ----------- " + "WEB1 WEB2 WEB3 ... ... ... WEBN "; } string GetDataFromUser(string UserName) { return "Data From User: " + UserName + " ----------- " + "UserData1 UserData2 UserData3 ... ... ... UserDataN "; } string GetDataFromSkype(string NickName) { return "Data From User: " + NickName + " ----------- " + "SkypeData1 SkypeData2 SkypeData3 ... ... ... SkypeDataN "; } // объявлю и константу, чтоб с ней поиграться const int SIZE = 4; string(*GetData_addresses[SIZE])(string SRC) = {&GetDataFromDB, &GetDataFromWebServer, &GetDataFromUser, &GetDataFromSkype }; // вместо адресов при перечислении элементов массива можно указать просто имена (указатели) функций string(*GetData_fun_names[SIZE])(string SRC) = { GetDataFromDB, GetDataFromWebServer, GetDataFromUser, GetDataFromSkype }; // смешанное перечисление string(*GetData_mixed[SIZE])(string SRC) = { GetDataFromDB, GetDataFromWebServer, &GetDataFromUser, &GetDataFromSkype }; void ShowInfo(string SRC, string (*fooPtr)(string str)) { cout
@lacklacktriplehack4174
@lacklacktriplehack4174 3 жыл бұрын
заранее сорри за некропостинг // 1. почему объявление такое же, как у двумерного массива? я не уверен но может это из-за того что мы создаем массив с указателями на функции? тобишь по факту это указатель на указатели на функции потому и объявление как у двумерного массива берем адреса для ячеек а в них пихаем указатели для функций
@artem_zar
@artem_zar Жыл бұрын
друг друг, стой. Ты не на стековерфлоу зашёл, успокойся немного хахаххаа
@borisfrolov1046
@borisfrolov1046 Жыл бұрын
Полезно и понятно)
@Empty_line
@Empty_line 11 ай бұрын
С начала он говорит что указатель на функцию не требует начальной инициализации а потом делает это😶
@hatred58
@hatred58 6 ай бұрын
@@Empty_line о нет!! об этом явно нельзя молчать!!!!!!!!!!
@Empty_line
@Empty_line 6 ай бұрын
@@hatred58 В смысле?
@hatred58
@hatred58 6 ай бұрын
@@Empty_line чувак тебе самому норм об этом в каждом комменте писать?))
@Empty_line
@Empty_line 6 ай бұрын
@@hatred58 Пока не дождусь ответа
@mikesteinar2713
@mikesteinar2713 3 жыл бұрын
Cергію. Після спроб дізнатись щось на інших каналах, на #SimpleCode повертаюсь немов додому. Дякую!
@aleksandrdrobyshev7623
@aleksandrdrobyshev7623 4 жыл бұрын
Старина, ты неправильный программист, значешь почему? Потому, что правильные програмисты не умеют объяснять :) Они всегда все объяснят так, буд-то тот, кому объясняют- уже и так все сам знает, как-бы как профессору экзамен сдают. В результате нихрена не понятно. Ты круто объясняешь, особенно когда с пэйнтом, не забывай про него. По поводу урока, я тебе верю, что это очень важно, и полезно, но нихрена не понял. :LOL: Т.е. какие-то наметки в голове есть, как работает вроде понятно, но зачем... Может кто попробует мне пример привести использования. Только не приводите пример в стиле "представь, что ты пишешь софт для СпейсШаттла".. ребят, если это уроки для чайника- чайник даже представить себе не сможет, что такое код для какого-то межгалактического монстра. П.С. побольше домашки, она заставляет думать. Даже простая, она заствляет самому проделать показанное на уроке.
@abdussattarkassymbekov3643
@abdussattarkassymbekov3643 3 жыл бұрын
Ну как-то раз, я делал так скажем свой "пейнт", только писал его не на С++, а JS, там тоже есть что-то похожее на эти указатели на функцию. Ближе к делу, нужно было чтобы когда пользователь нажимал на кнопку с прямоугольником, то он мог рисовать прямоугольник, а когда нажимал на кнопку с кругом, то рисовал круг. Реализация была такова: должна быть ОДНА функция (назовем ее draw), которая вызывается когда пользователь нажал на мышку и эта функция позволяет пользователю рисовать все фигуры которые ему доступны, но пока не совсем понятно как эта функция определяет что ей рисовать, а на самом деле это не совсем функция, это указатель на функцию, который меняется в зависимости от того на что нажал пользователь. То есть у нас есть указатель на функцию который называется draw, и он меняется от того на что мы нажали, допустим мы нажали на кнопку прямоугольника, и теперь draw указывает на функцию drawRect, которая специально написана чтобы рисовать прямоугольник, если нажали на круг, то draw указывает на drawCirclе, которая написана чтобы рисовать круг. В итоге выходит что мы вызываем один и тот же указатель на функцию, а он в свою очередь указывает на разные функции, которые могут делать абсолютно любые вещи. Мы просто обращаемся к этому указателю когда кто-то начал рисовать, и меняем функцию на которую он указывает когда, например с прямоугольника на круг или на просто линию. И еще нам в будущем может взбредить в голову дать возможность рисовать еще больше фигур, ну допустим треугольник, ради этого мы можем просто функцию drawTriangle написать, и потом добавить кнопку рисования треугольника, когда нажимаем на эту кнопку просто говорим что теперь draw указывает на drawTriangle. Не уверен что смог донести, если все еще слабо себе представляете, то я бы рекомендовал написать свой пейнт на JS тоже, это не так сложно как кажется, я написал это с 5-6 месячным опытом в JS.
@viktort9326
@viktort9326 3 жыл бұрын
Если коротко. Для чего нужна ф-ция? Чтобы в зависимости от переданных в неё параметров, получить определённый результат. Допустим ф-ция сложения. А теперь представь, что в эту ф-цию сложения ты передаёшь результаты полученные из других ф-ций. Неважно каких. Тебе главное сложить их результаты.
@user-hy1gl3xy2y
@user-hy1gl3xy2y 3 жыл бұрын
@@abdussattarkassymbekov3643 И зачем это надо Вы поясните? всё равно есть функции код которых рисует треугольник или квадрат или иное так почему же нельзя просто в зависимости от того на что нажали вызвать соответствующую функцию?
@abdussattarkassymbekov3643
@abdussattarkassymbekov3643 3 жыл бұрын
@@user-hy1gl3xy2y в случае если мы не будем использовать указателей на функцию, то я самым простым способом вижу так сделать. Когда я нажимаю на кнопку "рисовать треугольник" я меняю значение глобальной переменной на 1 (чтобы понять что сейчас надо рисовать) потом когда пользователь хочет рисовать что-то, то я просто проверяю значение этой глобальной переменной и в зависимости от этого рисую что-то. То есть тут используется if else конструкция, а писать много if else это не очень приятно как и читать лес из if else. Чтобы избавится от них можно использовать указателей на функцию, как мне кажется это более правильное решение и более понятное. Наверное чтобы хорошо понять это стоит поделать задачи на переопределение методов класса в ООП.
@abdussattarkassymbekov3643
@abdussattarkassymbekov3643 3 жыл бұрын
@@viktort9326 как вариант чтобы не дублировать код, возьмем функцию сложение векторов, можно написать только один раз эту функцию потом использовать по многу раз, даже тот же самый вывод на консоль это функция, если бы не было его то пришлось всю логику вывода на консоль писать каждый раз когда потребуется
@user-bb1nk1po5e
@user-bb1nk1po5e Жыл бұрын
привет из 2023. Спасибо большое за уроки!"
@shaman4946
@shaman4946 Жыл бұрын
Спасибо за урок!!! А может кто-нибудь подсказать как сделать так чтобы пользователь не вводил ShowInfo(DataFromBD); ручками в коде, а чтобы он, например, вводил в консоли DataFromBD и ему выходили данные?
@antandgen
@antandgen 6 жыл бұрын
Подскажите плис. Поделитесь опытом как закреплять пройденный материал. Очень похоже на то, как будто ощущаешь себя каким-то пассажиром. Всё вроде понятно, проходит время и .....
@aln9391
@aln9391 6 жыл бұрын
Перемешивать обработчики прерываний в микроконтроллера удобно
@nukacake1595
@nukacake1595 4 жыл бұрын
если ты мало чего запоминаешь - заведи тетрадь/блокнот
@channelworld5687
@channelworld5687 2 жыл бұрын
Ржал от "дата из астрала"))))
@_drevn1y_
@_drevn1y_ 11 ай бұрын
super
@Empty_line
@Empty_line 11 ай бұрын
С начала он говорит что указатель на функцию не требует начальной инициализации а потом делает это😶
@_drevn1y_
@_drevn1y_ 11 ай бұрын
@@Empty_line ну и
@Empty_line
@Empty_line 11 ай бұрын
@@_drevn1y_ Ну и почему?
@_drevn1y_
@_drevn1y_ 11 ай бұрын
@@Empty_line он хотя бы за бесплатно учит, и столько времени уделяет чтоб другие поняли
@etniqa3638
@etniqa3638 5 жыл бұрын
Как только заработаю первые деньги с программирования, кину половину тебе
@vitusink6445
@vitusink6445 4 жыл бұрын
Это будет не много, давай ты подкопишь годик-другой а потом кинешь :)
@gnog4627
@gnog4627 4 жыл бұрын
Извини, но это звучит так высокомерно.
@baki-taki
@baki-taki 4 жыл бұрын
Ну как, заработал и кинул? Или пошёл в другом направлении, любопытно очень
@etniqa3638
@etniqa3638 4 жыл бұрын
@@baki-taki уже пошел на стажировку по фронту, но начался карантин и ее перенесли. Постараюсь, чтобы взяли. Писал на spring boot и angular курсовую, если интересно.
@Matissed
@Matissed 3 жыл бұрын
Steve фронт это же не c++, как твой путь сложился, расскажи
@JohnSmith-es2fh
@JohnSmith-es2fh Жыл бұрын
такой момент, а можно ли сделать перегрузку функции, которая принимает функцию через указатель (как пример: одна функция принимает обычные функции, а другая - функции с указателями)
@user-sh2pv2cb5b
@user-sh2pv2cb5b 2 жыл бұрын
Сергею, большое спасибо за уроки! Вопрос к знатокам. Как быть, если "сторонняя" функция принимает аргументы? Допустим: string foo1 (int x); (возвращает строку с х в конце) string foo2 (int x); то вот так уже не работает, void GetFrom (string (*foo)(int x)) { cout
@user-qu5ch6rl4f
@user-qu5ch6rl4f 2 жыл бұрын
Именно так, с дополнительным аргументом. GetFrom(string(*foo)(inx x), int x) {}; И вызов соответственно GetFrom (foo1, 42); Если вам не нравится такой способ передачи данных в функцию, то нужно представить себе, каким он должен быть по вашему разумению, и попытаться реализовать. К примеру использовать переменные-буферы в общей зоне видимости. Ну или побороть чувство чего-то не того между (foo1(42)) , в случае которого вы сразу передаете результат работы функции foo1 (т.е. стринг) , и (foo1,42) - смотрите, даже на один знак меньше требуется)
@user-sh2pv2cb5b
@user-sh2pv2cb5b 2 жыл бұрын
@@user-qu5ch6rl4f , спасибо большое за ответ. Буду разбираться.
@BrownAleks
@BrownAleks 4 жыл бұрын
Огромное спасибо! Да.. я из этого урока зачерпнул полезного. Но вопросы остались: Каким образом возможно протащить параметры различных типов, через эту связку? Что бы параметры можно было задать в функцию ShowInfo(), потом какую то их часть обработать в её теле, какую то в теле конечных функций.
@Miiazzma
@Miiazzma Жыл бұрын
Ну думаю на ответ с различными типами данных в параметре помогут шаблонные функции, а вот на второй вопрос к сожалению ответа дать не могу
@BrownAleks
@BrownAleks Жыл бұрын
@@Miiazzma как вы думаете? я за два года нашёл ответы на свой вопрос? или нет? 😅
@shokweiv
@shokweiv Жыл бұрын
@@BrownAleks да?
@Bogelma
@Bogelma 4 жыл бұрын
а делегаты в С++ есть?
@ArkadiyAfonin
@ArkadiyAfonin 4 жыл бұрын
Callback :)
@anon3696
@anon3696 4 жыл бұрын
Здрастье, а как передать метод, в качестве параметра?
@aln9391
@aln9391 6 жыл бұрын
До этой формулировки я пытался амперсанд ставить перед именем
@theolduniverse
@theolduniverse 6 жыл бұрын
что за музыка подскажите)
@user-dv7kn3qh4g
@user-dv7kn3qh4g 6 жыл бұрын
Здраствуй, после месяца(или чуть больше) использования visual studio, мне пришло уведомление" лицензия закончиться через 5 дней. Смогу ли я пользоваться програмой через 5 дней?
@timurortskhanov8527
@timurortskhanov8527 6 жыл бұрын
А я по незнанию удалил. Думал скачал платную версию. И скачал заново. Как я недодумался спросить :))
@user-cv3vp6ml1k
@user-cv3vp6ml1k 4 жыл бұрын
Архангельский просто отдыхает.
@Viamsupervadetvadens
@Viamsupervadetvadens 6 жыл бұрын
up
@saintwinner9769
@saintwinner9769 3 жыл бұрын
спасибо, с астралом прикольно кста
@eugeneyusenkov3871
@eugeneyusenkov3871 6 жыл бұрын
DataFromAstral :D
@TheWladberlin
@TheWladberlin 4 жыл бұрын
Со второго раза только понял о чем речь и логику. Но так до конца не понял, в чем все-таки необходимость и преимущество использования промежуточной функции ShowInfo(), по сравнению с тем, что я могу напрямую обращаться к фунциям коллег, например GetDataFromBD() ?
@olexangrstetsiuk3092
@olexangrstetsiuk3092 4 жыл бұрын
Потому что назначение функции GetDataFromBD() - это возвратить какое либо значение и только. А уже функция ShowInfo() ,,напечатает,, это значение в консоль. И если вдруг понадобится еще это возвратимое значение передать иному пользователю по сети , то будет достаточно создать самому еще функцию к примеру void TransmitOverNetwork () с указателем ,затем в void main() сразу после ShowInfo() ; вызывать её с параметрами TransmitOverNetwork (GetDataFromBD); и тогда городить всякие условия (костыли) внутри функции void main() уже не надобно. Читаемость(упорядочность) кода повышается (конечно если только хорошо понимаешь .что такое указатели...)
@kazalamutr
@kazalamutr 5 жыл бұрын
Надо было объяснять на примере коллбеков. А то пример с коллегами прям какой-то сложный
@almatytelecom1
@almatytelecom1 3 жыл бұрын
да про коллбеки интересно было юы видео
The day of the sea 🌊 🤣❤️ #demariki
00:22
Demariki
Рет қаралды 91 МЛН
Must-have gadget for every toilet! 🤩 #gadget
00:27
GiGaZoom
Рет қаралды 11 МЛН
Динамическая память в языке C++
19:02
Оксана Еськова. Основы программирования
Рет қаралды 85
Всё об указателях в C++ за 20 минут
20:00
50 Гениальных Изобретений для Домовладельцев
1:00:35
Свежие Технологии
Рет қаралды 11 М.