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

Поділитися
Вставка
  • Опубліковано 24 січ 2025

КОМЕНТАРІ • 279

  • @CoolbitsVDA
    @CoolbitsVDA 2 роки тому +44

    Стадии просмотра данного видео:
    0:00 Интересно что там у нас сегодня?
    1:58 Опять указатели. Кто-то на кого-то указывает, в голове каша.
    9:23 Вроде все понятно. Только зачем мне указатель на функцию, если я могу вызвать функцию напрямую?
    18:58 Это ахрененно!!!! В очередной раз, спасибо огромное, Сергей!

  • @wlepnoga
    @wlepnoga 7 років тому +381

    Самый внятный канал о С++!

  • @satyrosa
    @satyrosa 2 роки тому +79

    Готовлюсь к собеседованию. Впервые слышу об этом. 4 года в универе. 2 самостоятельных проектов. И такое не в первый раз, спасибо!!

    • @francheeze
      @francheeze Рік тому +1

      И как?

    • @satyrosa
      @satyrosa Рік тому +7

      @@francheeze неудачно, но подозреваю, что это просто неуверенность. Плюс ещё с математикой налажала

    • @francheeze
      @francheeze Рік тому +4

      @@satyrosa Это печально

    • @pavel_losev
      @pavel_losev Рік тому +1

      ​@@francheezeа что было в самостоятельных проектах не секрет?

    • @francheeze
      @francheeze Рік тому

      @@pavel_losev ?

  • @user-mykyta_vyshniakov
    @user-mykyta_vyshniakov 4 роки тому +63

    Data from Astral - повеселило )))) Спасибо за уроки!

    • @korvax_goblin
      @korvax_goblin 2 роки тому

      Математическое описание состояния энергетики

    • @setwindowlongptr
      @setwindowlongptr 2 роки тому

      что такое astral

    • @MirrorOfLourence
      @MirrorOfLourence 2 роки тому +5

      @@setwindowlongptr Астрал и есть. Т.е., полагаю, данные, взятые с потолка)

  • @almosteasys-r3n
    @almosteasys-r3n 11 місяців тому +3

    Сергей, я безмерно благодарен вам за ваши уроки! ваш уровень объяснения, превосходен! абстрагирован настолько, что даже самые сложные темы познаются как 2+2

  • @yaroslavvdovenko3482
    @yaroslavvdovenko3482 7 років тому +135

    Еще не встречал настолько крутых обучалок😊😊

  • @bama2619
    @bama2619 3 роки тому +21

    Удобный инструмент! Спасибо. И почему я раньше не смотрел ваш канал? Как заработаю копеечку обязательно закину донат! Народный учитель должен жить хорошо. Большая помощь обществу.

  • @Dmitrii82
    @Dmitrii82 4 роки тому +5

    Весь интернет перелопатил нихрена не понял, только вы можете объяснить доходчиво. Громадное спасибо

  • @ДмитрийЕвтушенко-к3т
    @ДмитрийЕвтушенко-к3т 7 років тому +72

    сначала послышалось калек а не КОЛЛЕГ но по смыслу подходить)))

  • @Ermine882
    @Ermine882 7 років тому +21

    Как всегда спасибо за урок и оперативность.

  • @ДмитрийКулявец-в5у
    @ДмитрийКулявец-в5у 5 років тому +16

    Концовочка урока порадовала - данные из астрала))) Но зато всё прекрасно понятно) Спасибо за уроки!

  • @sashatim8244
    @sashatim8244 6 років тому +10

    Круть, 3 месяца изучаю C++ и впервые узнал об указателе на функцию.

    • @nerts4720
      @nerts4720 2 місяці тому

      тоже самое, а у вас видимо уже 6 лет опыта на данный момент😅

  • @amd3s
    @amd3s 7 років тому +29

    Хм, реально крутая фишка!
    Спасибо.

  • @Jessica_Cat-l1v
    @Jessica_Cat-l1v 11 місяців тому

    Смотрю и радуюсь! Предельно ясно и понятно, в самый раз для чайника))))

  • @zumaxrussia
    @zumaxrussia 6 років тому +5

    Спасибо Сергей. Добротное видео. Как в прочем всегда.

  • @vadimturok59
    @vadimturok59 4 роки тому

    Автора и по голосу приятно слушать и розжевывает все до мелочей, спасибо!

  • @archiechellaut9483
    @archiechellaut9483 3 роки тому +3

    Большое спасибо вам за урок и прекрасное пояснение, Сергей!

  • @antandgen
    @antandgen 7 років тому +48

    Сергей, добрый день! Во первых хочу поблагодарить Вас за ваш ТРУД, реально очень помогает в освоении С++. У меня огромная просьба. Просьба такая, подскажите как параллельно с изучением С++, еще практически закреплять пройденный материал. Пример: Ваши уроки это ТЕОРИЯ и бывает так, что для полного понимания хочется ПРАКТИКИ, но в силу не большого багажа знаний сложно практиковаться, но практиковаться НАДО. Есть три урока как создать игру "Змея" на основе С++, очень помогло понять до конца как работают функции, ОЧЕНЬ ПОМОГЛИ ВАШИ УРОКИ,может у Вас есть практические уроки для полного понимания. Спасибо.

    • @dmax8622
      @dmax8622 6 років тому +44

      Вопрос конечно не мне , но отвечу, так как меня это тоже интересовало. Есть две отличные книги : "Сборник задач по программированию" Д.М.Златопольский и "Сборник задач в примерах" Н.Культин. Д.М. Златопольский хорош тем что, все его задачи, в каждом разделе, начинаются с элементарно легких, и ПОСТЕПЕННО усложняются до максимум сложности. А вот Н.Культина, ко всем задачам, в разделах, есть решения. Ну вот как-то так.
      PS.
      Лично мне больше нравится "Сборник задач по программированию" Д.М.Златопольского, мне он ОЧЕНЬ ПОМОГ в изучении С++.

    • @avamnepohui7260
      @avamnepohui7260 6 років тому +1

      @@dmax8622 Заодно можно подучить и то, что в школе было успешно прогуляно или забыто))

    • @ubermenschliche1319
      @ubermenschliche1319 5 років тому +1

      Andrey A На канале есть домашние задания по с++

    • @ДониёрРахманов-ч1ю
      @ДониёрРахманов-ч1ю 5 років тому +1

      @@dmax8622 Спасибо большое,то что надо!

    • @ДанилЛевковский-ц8г
      @ДанилЛевковский-ц8г 2 роки тому +1

      @@dmax8622 Спасибо

  • @staspineapple6962
    @staspineapple6962 4 роки тому +6

    Весьма доволен собой был до поры до времени:D

  • @Ank2929
    @Ank2929 2 роки тому

    Вы первый человек, которому удалось объяснить мне пользу указателей

  • @timurortskhanov8527
    @timurortskhanov8527 7 років тому +8

    Наиогромнейшее СПАСИБО. Вы СУПЕР.

  • @АртурНестерук-ж2й
    @АртурНестерук-ж2й 5 років тому +1

    Я Вас благодарю за Вашу работу, очень хорошо всё объясняете!

  • @chausovanton
    @chausovanton 4 роки тому +12

    Во первых, Огромный респект за канал!
    Такой вопрос: Зачем использовать указатель на функцию, если примерно такого же эффекта можно добиться вот так:
    string DataFromBD()
    {
    return "Data From BD";
    }
    void ShowInfo(string str)
    {
    cout

    • @ДмитрийНормов-ю6ц
      @ДмитрийНормов-ю6ц 2 роки тому +13

      указатели позволяют экономить память.

    • @sense5879
      @sense5879 6 місяців тому

      @@ДмитрийНормов-ю6ц и сколько ты такими методами памяти сэкономишь? Проще уже изначально всё по уму писать и обращать внимание на действительно важные вещи, чем вот так вот синтаксис усложнять. Куева туча скобок и всё слеплено вместе, бред, а ты представь если весь проект такой?

  • @itstudio3107
    @itstudio3107 3 роки тому +6

    Спасибо за наглядный пример. Хотя, мне кажется, стоило пример отрисовать в пэинте - так нагляднее. Я прям чувствую, что понял смысл лишь на половину. Но в любом случае огромное спасибо и за пример, и за урок!

  • @kadyshev2759
    @kadyshev2759 5 років тому +6

    9:55 Трудно представить
    *Спасибо за урок*

  • @somebuddy1202
    @somebuddy1202 4 роки тому

    Огромное спасибо! Очень наглядно и без воды.

  • @АлексФерНорте
    @АлексФерНорте 6 років тому +2

    Спасибо тебе за твой труд, дружище!

  • @VideobufferGoPro12-kn2ok
    @VideobufferGoPro12-kn2ok 8 місяців тому

    Даже коммент напишу, очень качественно объяснено👍👍👍

  • @SeshAlex
    @SeshAlex 6 років тому +7

    Спасибо за урок! Предвкушаю как я сейчас буду издеваться над указателями, может че и придумаю:)

  • @ДмитрийБузницкий-б3н

    Спасибо, Сергей. Как всегда познавательно

  • @NoRussiaNoCry
    @NoRussiaNoCry 2 роки тому +13

    Як нечакана і прыемна было даведацца, што аўтар гэтага выдатнага каналу з роднай Украіны...
    Дзякуй вялікі за працу і трымайцеся, сябры!

    • @ДанилЛевковский-ц8г
      @ДанилЛевковский-ц8г 2 роки тому +3

      Частенько встречаю талантливых прогеров из Украины. Не так давно один мой друг, переехал в Канаду и теперь работает там. Видимо тоже не плохой специалист.

    • @АлексейДоровской-х2ъ
      @АлексейДоровской-х2ъ Рік тому +1

      Интересный у тебя ник). Раз ты так переживаешь за свою родину, то че на фронте-то не защищаешь ее? Или у тебя "активная" политическая позиция только в интернете? Хотя может тебя уже мобилизовали и ты сейчас лежишь-гниешь в поле где-нибудь под Артемовском...

    • @illiahimself
      @illiahimself 11 місяців тому +1

      @@АлексейДоровской-х2ъ ты еблан? это беларуская мова

  • @АртёмЯрошенко-и3е
    @АртёмЯрошенко-и3е 5 років тому +2

    Очень просто и понятно. Спасибо вам!)

  • @SimpleCodeIT
    @SimpleCodeIT  7 років тому +12

    #указательнафункцию #SimpleCode #урокипрограммирования

    • @ЧеловекРавнодушный
      @ЧеловекРавнодушный 5 років тому

      Тут можно и без указателя обойтись. В функцию ShowInfo можно тупо передать функцию...

    • @andreysholmin5863
      @andreysholmin5863 5 років тому

      @@ЧеловекРавнодушный Я тоже так попробовал, получилось и тогда вопрос, в чем различие указателя на функцию и без указателя передача функции?

    • @ЧеловекРавнодушный
      @ЧеловекРавнодушный 5 років тому

      Андрей Шолмин, у меня такой же вопрос. Тут либо накосячил автор ролика, либо есть некая принципиальная разница, которую мы поймём в будущем. Я снова пока забросил Си++... Я к нему периодически возвращаюсь... Но если вы раньше меня поймёте, оставьте комментарий прямо здесь... Сохраните ссылку на видео для этого, да и на комментарий тоже...

    • @vovadenys4149
      @vovadenys4149 5 років тому +6

      ​@@andreysholmin5863 передавая функцию компилятор не лично ее передает а создает ее копию и тогда у вас 1 функция занимает в 2 раза больше памяти (функция и копия). А передавая по указателю вы как бы на прямую работаете с функцией. Вроде как то так) поправте если чо

    • @vovadenys4149
      @vovadenys4149 5 років тому +2

      @@ЧеловекРавнодушный передавая функцию компилятор не лично ее передает а создает ее копию и тогда у вас 1 функция занимает в 2 раза больше памяти (функция и копия). А передавая по указателю вы как бы на прямую работаете с функцией. Вроде как то так

  • @melmenx
    @melmenx 5 років тому +2

    Я понял это так. Есть несколько функций. Чтобы вызвать одну нам необходимо создать функцию, параметром которой является указатель на функцию.
    void ShowFun(string(*pFoo)()) // функция, параметром которой является указатель на функцию
    {
    cout

  • @Rueslan
    @Rueslan 6 місяців тому

    Топ объяснение делегатов. Нисмотря на то что данные берутся из астрала)

  • @Firuz26
    @Firuz26 7 років тому +19

    Спасибо

  • @sixaxisization
    @sixaxisization 2 роки тому +2

    Так они все возвращают string....в качестве аргумента суем string и все... Нет? showInfo(string str){cout

  • @arzamas1988
    @arzamas1988 Рік тому

    Я постоянно юзаю указатеди на функци в машине состояний. Есть энамы, описывающие события и текущее состояние. Есть двойной массив, который содержит указатели на функции. Комбинацией значений событие и текущее_состоянте формируется индекс (x и y) и выбирается нужная функция. Коряво объяснил. Но инструмент очень удобный.

  • @BortMechanick
    @BortMechanick 7 років тому +13

    спасибо за урок

    • @SimpleCodeIT
      @SimpleCodeIT  7 років тому +1

      Пожалуйста! =)

    • @hackerman5984
      @hackerman5984 3 роки тому

      @@SimpleCodeIT Спасибо за урок,с помощью вас я наконец-то смог программировать на С++. Пересматриваю ваши ролики.

    • @ВладиславМаксимов-р5х
      @ВладиславМаксимов-р5х 3 роки тому

      @@hackerman5984 Работаете программистом?

  • @LenTos1337
    @LenTos1337 6 років тому +4

    Спасибо вам большое за урок

  • @maksinima
    @maksinima 6 років тому +3

    И как я мог пропустить такой важный урок?? Спасибо вам большое!

  • @learning4702
    @learning4702 Рік тому

    Спасибо за видео, узнал для себя новую возможность С++)

  • @shahriyorturayev311
    @shahriyorturayev311 2 роки тому

    eng zo`r kanal sizga rahmat

  • @bulba1995
    @bulba1995 2 роки тому +1

    Классная штука , нужно по практиковаться.

  • @ИвановАндрей-ш5м
    @ИвановАндрей-ш5м 6 років тому +2

    Очень крутой урок, спасибо большое!

  • @stensej6841
    @stensej6841 4 роки тому +1

    спасибо Сергей!

  • @pepperyflow
    @pepperyflow 2 роки тому

    Спасибо! Помогаете!!!

  • @slimbdeful
    @slimbdeful 6 років тому +1

    Очень важная тема!

  • @ЕвгенийВасильев-и3п

    Ёлки-палки. Смотрел многопоточное программирование, а там сказали какой-то урок про лямбду посмотреть для понимания. Стал смотреть про лямбду, там сказали посмотреть про полиморфную обертку. В полиморфной обертке отправили сюда и еще куда-то про цикл foreach... Короче, обход дерева в глубину

    • @ЕвгенийВасильев-и3п
      @ЕвгенийВасильев-и3п 4 роки тому

      Линейный список. (как открыть ларёк): ...через 2 дня пришел. Сказали, я слишком худой - надо пойти поесть, чтобы 2 дня не есть, чтоб потом сдать кровь, чтоб жизнь страховать, чтоб прийти в банк, чтоб прийти в ЗАГС, чтоб пойти в ЖЭК, чтобы пойти в УВД, чтоб пойти в МОСГОСТРАНС, чтоб пойти в УПРАВУ, чтоб пойти в БТИ, чтоб пойти в ФНС, чтобы открыть ларёк...

    • @abdussattarkassymbekov3643
      @abdussattarkassymbekov3643 4 роки тому

      забавная ситуация)

  • @randorteam3122
    @randorteam3122 3 роки тому

    ставлю лайк, спасибо за ваши уроки)😀

  • @АлександрЛитвинюк-х2ы

    Спасибо за знания !

  • @kvizyx636
    @kvizyx636 3 роки тому

    Большое вам спасибо!)

  • @lossofsoul3693
    @lossofsoul3693 9 місяців тому

    DataFromAstral это сильно :)))
    Мой универсальный препод по программированию все время называл тестовые переменные doloto1, doloto2... :)

    • @lossofsoul3693
      @lossofsoul3693 9 місяців тому

      string GetDataFromAstral(double mercuryPosition) {
      return DoMagic(mercuryPosition)
      }

  • @aleksandrdrobyshev7623
    @aleksandrdrobyshev7623 4 роки тому +124

    Старина, ты неправильный программист, значешь почему? Потому, что правильные програмисты не умеют объяснять :) Они всегда все объяснят так, буд-то тот, кому объясняют- уже и так все сам знает, как-бы как профессору экзамен сдают. В результате нихрена не понятно.
    Ты круто объясняешь, особенно когда с пэйнтом, не забывай про него.
    По поводу урока, я тебе верю, что это очень важно, и полезно, но нихрена не понял. :LOL:
    Т.е. какие-то наметки в голове есть, как работает вроде понятно, но зачем...
    Может кто попробует мне пример привести использования. Только не приводите пример в стиле "представь, что ты пишешь софт для СпейсШаттла".. ребят, если это уроки для чайника- чайник даже представить себе не сможет, что такое код для какого-то межгалактического монстра.
    П.С. побольше домашки, она заставляет думать. Даже простая, она заствляет самому проделать показанное на уроке.

    • @abdussattarkassymbekov3643
      @abdussattarkassymbekov3643 4 роки тому +62

      Ну как-то раз, я делал так скажем свой "пейнт", только писал его не на С++, а JS, там тоже есть что-то похожее на эти указатели на функцию. Ближе к делу, нужно было чтобы когда пользователь нажимал на кнопку с прямоугольником, то он мог рисовать прямоугольник, а когда нажимал на кнопку с кругом, то рисовал круг. Реализация была такова: должна быть ОДНА функция (назовем ее draw), которая вызывается когда пользователь нажал на мышку и эта функция позволяет пользователю рисовать все фигуры которые ему доступны, но пока не совсем понятно как эта функция определяет что ей рисовать, а на самом деле это не совсем функция, это указатель на функцию, который меняется в зависимости от того на что нажал пользователь. То есть у нас есть указатель на функцию который называется draw, и он меняется от того на что мы нажали, допустим мы нажали на кнопку прямоугольника, и теперь draw указывает на функцию drawRect, которая специально написана чтобы рисовать прямоугольник, если нажали на круг, то draw указывает на drawCirclе, которая написана чтобы рисовать круг. В итоге выходит что мы вызываем один и тот же указатель на функцию, а он в свою очередь указывает на разные функции, которые могут делать абсолютно любые вещи. Мы просто обращаемся к этому указателю когда кто-то начал рисовать, и меняем функцию на которую он указывает когда, например с прямоугольника на круг или на просто линию. И еще нам в будущем может взбредить в голову дать возможность рисовать еще больше фигур, ну допустим треугольник, ради этого мы можем просто функцию drawTriangle написать, и потом добавить кнопку рисования треугольника, когда нажимаем на эту кнопку просто говорим что теперь draw указывает на drawTriangle. Не уверен что смог донести, если все еще слабо себе представляете, то я бы рекомендовал написать свой пейнт на JS тоже, это не так сложно как кажется, я написал это с 5-6 месячным опытом в JS.

    • @viktort9326
      @viktort9326 4 роки тому

      Если коротко. Для чего нужна ф-ция? Чтобы в зависимости от переданных в неё параметров, получить определённый результат. Допустим ф-ция сложения. А теперь представь, что в эту ф-цию сложения ты передаёшь результаты полученные из других ф-ций. Неважно каких. Тебе главное сложить их результаты.

    • @МаксимШлык-б8т
      @МаксимШлык-б8т 3 роки тому +2

      @@abdussattarkassymbekov3643 И зачем это надо Вы поясните? всё равно есть функции код которых рисует треугольник или квадрат или иное так почему же нельзя просто в зависимости от того на что нажали вызвать соответствующую функцию?

    • @abdussattarkassymbekov3643
      @abdussattarkassymbekov3643 3 роки тому +4

      @@МаксимШлык-б8т в случае если мы не будем использовать указателей на функцию, то я самым простым способом вижу так сделать. Когда я нажимаю на кнопку "рисовать треугольник" я меняю значение глобальной переменной на 1 (чтобы понять что сейчас надо рисовать) потом когда пользователь хочет рисовать что-то, то я просто проверяю значение этой глобальной переменной и в зависимости от этого рисую что-то. То есть тут используется if else конструкция, а писать много if else это не очень приятно как и читать лес из if else. Чтобы избавится от них можно использовать указателей на функцию, как мне кажется это более правильное решение и более понятное. Наверное чтобы хорошо понять это стоит поделать задачи на переопределение методов класса в ООП.

    • @abdussattarkassymbekov3643
      @abdussattarkassymbekov3643 3 роки тому

      @@viktort9326 как вариант чтобы не дублировать код, возьмем функцию сложение векторов, можно написать только один раз эту функцию потом использовать по многу раз, даже тот же самый вывод на консоль это функция, если бы не было его то пришлось всю логику вывода на консоль писать каждый раз когда потребуется

  • @sardorkhuja
    @sardorkhuja 5 років тому

    Очень понятно все объяснил, спасибо

  • @artugun1
    @artugun1 28 днів тому

    Мне кажется или это рудимент с каких то давних пор, внятного примера, где это может быть использовано, я не увидел. Хотя мне понравился пример у ChatGPT, как использование массива команд, хотя всё ровно сомнительно:
    string GetFromNetwork() {
    return "Data from Network";
    }
    int main() {
    string(*sources[])() = {DataFromBD, DataFromFile, GetFromNetwork};
    for (auto source : sources) {
    cout

  • @Blade_Ruiner
    @Blade_Ruiner 3 роки тому +2

    Код становиться чище, но все равно необходимо написать так же условие передачи функции. =) Но так код хоть оптимизирован

  • @ДанилЛевковский-ц8г

    Ожидал, что пример будет по функции rand(); Мне кажется она реализована по тому же принципу и ссылается видимо на srand(); учитывая что вторая расширяет функционал первой.

  • @Viktor_Kardakov
    @Viktor_Kardakov Рік тому

    Со второго раза понял о чём речь, спасибо!

    • @user-8454null
      @user-8454null Рік тому

      С начала он говорит что указатель на функцию не требует начальной инициализации а потом делает это😶

  • @nap0le0nb0naparte7
    @nap0le0nb0naparte7 7 років тому +3

    Круто!!!

  • @mannas273
    @mannas273 4 роки тому +9

    чет я встярл с этими указателями. понимаю вроде , а потом все исчезает из памяти

  • @ДавидМархевка-л5й

    крутая вещь, спасибо.

  • @АртурГребешков-к6ж
    @АртурГребешков-к6ж 6 років тому +3

    Спасибо!

  • @alexxxusxxi
    @alexxxusxxi 6 років тому +2

    Для закрепления материала
    Массивы указателей на функции. Обычные и динамические.
    Чтобы усложнить задачку функция, передаваемая в виде аргумента в другую функцию, так же принимает параметр.
    В конечном итоге передача указателя на функцию в качестве параметра другой функции в цикле из массива таких указателей :)
    Внизу есть пара вопросов, буду признателен, если получу на них ответ.
    #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 4 роки тому

      заранее сорри за некропостинг
      // 1. почему объявление такое же, как у двумерного массива?
      я не уверен но может это из-за того что мы создаем массив с указателями на функции? тобишь по факту это указатель на указатели на функции
      потому и объявление как у двумерного массива
      берем адреса для ячеек а в них пихаем указатели для функций

    • @artem_zar
      @artem_zar 2 роки тому

      друг друг, стой. Ты не на стековерфлоу зашёл, успокойся немного хахаххаа

  • @МарияАксенова-о9к
    @МарияАксенова-о9к 3 роки тому

    лучший, огромное спасибо

  • @shaman4946
    @shaman4946 2 роки тому +1

    Спасибо за урок!!! А может кто-нибудь подсказать как сделать так чтобы пользователь не вводил ShowInfo(DataFromBD); ручками в коде, а чтобы он, например, вводил в консоли DataFromBD и ему выходили данные?

  • @antandgen
    @antandgen 7 років тому +11

    Подскажите плис. Поделитесь опытом как закреплять пройденный материал. Очень похоже на то, как будто ощущаешь себя каким-то пассажиром. Всё вроде понятно, проходит время и .....

    • @aln9391
      @aln9391 6 років тому

      Перемешивать обработчики прерываний в микроконтроллера удобно

    • @nukacake13
      @nukacake13 5 років тому +4

      если ты мало чего запоминаешь - заведи тетрадь/блокнот

  • @aln9391
    @aln9391 6 років тому +1

    Я в своё время сформулировал для себя, что имя функции это её метка или адрес. Вызов через косвенную адресацию.

  • @Непрофессионалымы

    чел, мне очень обидно за Тебя. Такой огромный, качественный труд, а теперь убрали монетизацию. это треш. Дай Бог Тебе здоровья. это зачтется. Я вчера проходил собес на джуна, жду ответ, думаю что все хорошо. Учился на Твоих видосах. спасибо

    • @DaniilS98
      @DaniilS98 Рік тому

      Работаешь уже?)

    • @Непрофессионалымы
      @Непрофессионалымы Рік тому

      @@DaniilS98 угу)

    • @DaniilS98
      @DaniilS98 Рік тому

      @@Непрофессионалымы слушай, а ты с c++ начал? Расскажи плиз как вообще учился че делал

    • @Непрофессионалымы
      @Непрофессионалымы Рік тому +2

      @@DaniilS98 изначально учился на java . javarush ресурс был такой. в рамках интересов начал работать с arduino и есп. где то год пилил свои проекты и изучал ардуино. вообще она стала такой прослойкой для меня между java и c++. потом возникли сложности с трудовой деятельностью и нужно было выбирать дальнейший путь и профессию. решил учиться на c++. посмотрел этот канал, попрактиковался и вылез на hhru. получил около 50 отказов и грубо говоря 51 взяли на работу. почему не остался на java? потому что просто больше понравились плюсы

    • @Непрофессионалымы
      @Непрофессионалымы Рік тому +2

      @@DaniilS98 но самое главное я очень очень много писал. безобразного и отвратительного кода, который все-таки работал, но показывать который стыдно. без этого никак не научишься. нужно придумать себе проект и реализовывать его от начала и обязательно до конца. в какой-то момент поймешь что пришло время показать себя

  • @woltmetr
    @woltmetr Рік тому

    через консоль можно вызвать нужную функцию?

  • @mikesteinar2713
    @mikesteinar2713 4 роки тому +2

    Cергію. Після спроб дізнатись щось на інших каналах, на #SimpleCode повертаюсь немов додому. Дякую!

  • @Kopatych69
    @Kopatych69 3 роки тому

    Неплохо было б подать в качестве аргумента массив указателей на функцию и последовательно исполнять их.

  • @vandyke2035
    @vandyke2035 4 роки тому +2

    Приведено 2 варианта реализации: 1й Вариант - определяет ссылку на функцию, и нет возможности в эту ссылку добавить реализацию через {} - к примеру то же действие вывода на экран - cout, 2й вариант - в конце - создает функцию в которой есть своя реализация внутри { cout...} с вызовом по ссылке функций Data..., однако, без возможности передачи параметров. Вообщем не не вижу для себя удобства - так как если создавать свою функцию, то зачастую нужно передавать параметры в вызываемые по ссылке функции. А если мы внутри main создаем эту конструкцию - то тогда и ссылок ненадо - прямые обращения к функциям быстрее и короче

    • @danielvladimirov7077
      @danielvladimirov7077 3 роки тому

      Van Dyke, полностью согласен! Реализовать 2 вариант с передаваемыми параметрами можно , но супер не удобно. Так что по сути ваше утверждение полностью верно, намного быстрее и читабильнее вывести функцию напрямую.

  • @ANDRUSHKAGAMING228
    @ANDRUSHKAGAMING228 6 років тому +1

    Спасибо, толково ))

  • @ИоаннДейкун
    @ИоаннДейкун 2 роки тому

    привет из 2023. Спасибо большое за уроки!"

  • @DimDsgn
    @DimDsgn 10 днів тому

    )) опять же я все равно мог бы вызвать все эти функции напрямую из мейна😄

  • @JohnSmith-es2fh
    @JohnSmith-es2fh 2 роки тому

    такой момент, а можно ли сделать перегрузку функции, которая принимает функцию через указатель
    (как пример: одна функция принимает обычные функции, а другая - функции с указателями)

  • @verbof2527
    @verbof2527 3 роки тому

    Круто, полиморфизм в процедурном стиле)

  • @АлександрЯркин-й9я
    @АлександрЯркин-й9я 4 роки тому +3

    Вернулся пересмотреть после видео с абстрактными классами :)

  • @Bogelma
    @Bogelma 4 роки тому +1

    а делегаты в С++ есть?

  • @АртимаркШильд
    @АртимаркШильд 2 роки тому +1

    Сергею, большое спасибо за уроки!
    Вопрос к знатокам.
    Как быть, если "сторонняя" функция принимает аргументы?
    Допустим:
    string foo1 (int x); (возвращает строку с х в конце)
    string foo2 (int x);
    то вот так уже не работает,
    void GetFrom (string (*foo)(int x))
    {
    cout

    • @Сергей-т9д7в
      @Сергей-т9д7в 2 роки тому

      Именно так, с дополнительным аргументом. GetFrom(string(*foo)(inx x), int x) {};
      И вызов соответственно GetFrom (foo1, 42);
      Если вам не нравится такой способ передачи данных в функцию, то нужно представить себе, каким он должен быть по вашему разумению, и попытаться реализовать. К примеру использовать переменные-буферы в общей зоне видимости. Ну или побороть чувство чего-то не того между (foo1(42)) , в случае которого вы сразу передаете результат работы функции foo1 (т.е. стринг) , и (foo1,42) - смотрите, даже на один знак меньше требуется)

    • @АртимаркШильд
      @АртимаркШильд 2 роки тому

      @@Сергей-т9д7в , спасибо большое за ответ.
      Буду разбираться.

  • @ide9827
    @ide9827 Рік тому

    автор красавчик неимоверный ура

    • @user-8454null
      @user-8454null Рік тому

      С начала он говорит что указатель на функцию не требует начальной инициализации а потом делает это😶

    • @ide9827
      @ide9827 Рік тому +1

      @@user-8454null в любом случае, раньше я не знал про это вообще ничего, а теперь знаю что такая штука в принципе существует и смогу ей воспользоваться на плюсах при необходимости
      это круто

  • @Тэдифан
    @Тэдифан 2 роки тому

    Очень класные видео спасибо за контент

  • @aleksandercross5936
    @aleksandercross5936 5 років тому

    Спасибо, сижу блин в академии тема: Лямбда выражения, препод как-то поверхностно объяснил. Вот сначала посмотрел про указатели на функции)

  • @qqorvex
    @qqorvex 7 років тому +3

    Спасибо за уроки. А работа с файлами будет?

  • @borisfrolov1046
    @borisfrolov1046 Рік тому

    Полезно и понятно)

    • @user-8454null
      @user-8454null Рік тому

      С начала он говорит что указатель на функцию не требует начальной инициализации а потом делает это😶

    • @hatred58
      @hatred58 Рік тому

      @@user-8454null о нет!! об этом явно нельзя молчать!!!!!!!!!!

    • @user-8454null
      @user-8454null Рік тому +1

      @@hatred58 В смысле?

    • @hatred58
      @hatred58 Рік тому

      @@user-8454null чувак тебе самому норм об этом в каждом комменте писать?))

    • @user-8454null
      @user-8454null Рік тому

      @@hatred58 Пока не дождусь ответа

  • @vovadenys4149
    @vovadenys4149 5 років тому +2

    5:38 fooPointer = foo; ? операцию взятия адреса не надо как для переменных? fooPointer = &foo;

  • @РусланКарнеенко
    @РусланКарнеенко 8 місяців тому

    Cпасибо

  • @donrumata5299
    @donrumata5299 5 років тому +2

    Полезная функция

  • @РустамКаримов-х6щ
    @РустамКаримов-х6щ 6 років тому +2

    Читайте Подбельского... там все тоже самое из прошлого века. Ну и скажу что это очень давно придумано в С++ (на самом деле использовано в с++ как и ООП) как и многое другое... Указатели на функции очень круто использовать для меню... поспорил как-то в прошлом веке кто напишет определенное меню на с++ или визуал бейсик.. типа.... я чуть ли не в блокноте на с++ напишу меню... либо среда визуал бейсик (с подсказками). на один день опоздал... проиграл спор (три дня на задачу вне работы.) Но я показал оппоненту... что как за пять минут расширить функционал меню за счет указателей на функции, когда ему пришлось бы тоже самое сделать опять за три дня... с тех пор началась моя любовь к с++.

  • @linterrupt
    @linterrupt 5 років тому +1

    Почему указатель, а не ссылка, со ссылкой больше общего, нет никаких разыменований, оператора взятия адреса и.т.д

  • @etniqa3638
    @etniqa3638 6 років тому +15

    Как только заработаю первые деньги с программирования, кину половину тебе

    • @vitusink6445
      @vitusink6445 5 років тому +3

      Это будет не много, давай ты подкопишь годик-другой а потом кинешь :)

    • @gnog4627
      @gnog4627 4 роки тому +1

      Извини, но это звучит так высокомерно.

    • @baki-taki
      @baki-taki 4 роки тому

      Ну как, заработал и кинул? Или пошёл в другом направлении, любопытно очень

    • @etniqa3638
      @etniqa3638 4 роки тому +1

      @@baki-taki уже пошел на стажировку по фронту, но начался карантин и ее перенесли. Постараюсь, чтобы взяли. Писал на spring boot и angular курсовую, если интересно.

    • @Matissed
      @Matissed 4 роки тому

      Steve фронт это же не c++, как твой путь сложился, расскажи

  • @BrownAleks
    @BrownAleks 5 років тому

    Огромное спасибо! Да.. я из этого урока зачерпнул полезного. Но вопросы остались: Каким образом возможно протащить параметры различных типов, через эту связку? Что бы параметры можно было задать в функцию ShowInfo(), потом какую то их часть обработать в её теле, какую то в теле конечных функций.

    • @Miiazzma
      @Miiazzma 2 роки тому

      Ну думаю на ответ с различными типами данных в параметре помогут шаблонные функции, а вот на второй вопрос к сожалению ответа дать не могу

    • @BrownAleks
      @BrownAleks 2 роки тому +1

      @@Miiazzma как вы думаете? я за два года нашёл ответы на свой вопрос? или нет? 😅

    • @shokweiv
      @shokweiv 2 роки тому

      @@BrownAleks да?

  • @anon3696
    @anon3696 5 років тому

    Здрастье, а как передать метод, в качестве параметра?

  • @Mura905
    @Mura905 2 роки тому +2

    Скажите пожалуйста, почему "foo", а не "func"?

    • @chai7598
      @chai7598 2 роки тому +1

      там нет разницы

    • @sleepyNovember_project
      @sleepyNovember_project 11 місяців тому

      А почему Мура а не Дура?

    • @Mura905
      @Mura905 11 місяців тому

      У кого то одно место зачесалось да? @@sleepyNovember_project

    • @sleepyNovember_project
      @sleepyNovember_project 11 місяців тому

      @@Mura905 да, мозг зачесалася от твоего глупенького вопроса, прости уж

    • @Mura905
      @Mura905 11 місяців тому

      Глупый вопрос это тот, который не задан.@@sleepyNovember_project

  • @pigsel2509
    @pigsel2509 Рік тому

    А есть возможность сделать указатель на встроенную функцию, такую как min() или max()?

    • @user-8454null
      @user-8454null Рік тому

      С начала он говорит что указатель на функцию не требует начальной инициализации а потом делает это😶

  • @АнастасияДурова-г6ш

    а если, допустим, мы хотим функцию нескольких аргументов проинтегрировать по одному... такое возможно?

  • @gagikarakelyan6014
    @gagikarakelyan6014 4 роки тому

    Спасибо.

  • @TheWladberlin
    @TheWladberlin 5 років тому

    Со второго раза только понял о чем речь и логику. Но так до конца не понял, в чем все-таки необходимость и преимущество использования промежуточной функции ShowInfo(), по сравнению с тем, что я могу напрямую обращаться к фунциям коллег, например GetDataFromBD() ?

    • @olexangrstetsiuk3092
      @olexangrstetsiuk3092 5 років тому +1

      Потому что назначение функции GetDataFromBD() - это возвратить какое либо значение и только. А уже функция ShowInfo() ,,напечатает,, это значение в консоль. И если вдруг понадобится еще это возвратимое значение передать иному пользователю по сети , то будет достаточно создать самому еще функцию к примеру
      void TransmitOverNetwork () с указателем ,затем в void main() сразу после ShowInfo() ; вызывать её с параметрами TransmitOverNetwork (GetDataFromBD); и тогда городить всякие условия (костыли) внутри функции void main() уже не надобно. Читаемость(упорядочность) кода повышается (конечно если только хорошо понимаешь .что такое указатели...)

  • @Pablo_Str
    @Pablo_Str 11 місяців тому

    А с функциями с параметрами почему-то не работает. По менторингу отсылки нет случайно?