спасибо, а как же динамическое связывания? при переопределении виртуальной функции вызовы этой функции становятся динамическими. Во время выполнения программы, компилятор определяет какую функцию вызвать в соответсвии с типом объекта.
Передаю респект всем кто не забросил и дошёл до этого урока + автору за хорошее обучение. Я перешёл сюда с платного курса C++ Developer потому что хоть там и профессионалы, далеко не каждый сможет подробно и понятно объяснить материал (Там за 30 минут объяснили 10+ уроков Сергея😂)
@HessW можешь подсказать, для перехода на программирование в UE5 хватит базы или надо заранее изучить ещё системы сборки, работу с сетями, deep learning, computer science?
Из слов в начале можно сделать вывод что virtual определяет полиморфизм в С++. Но если его не использовать то поведение в дочерних классах тоже переопределяется, это тоже подходит под описание полиморфизм. Разница лишь в том, что без виртуала вызовется функция которая определена типом переменной, если она не определена в классе потомке, то вызовется функция базового класса. А вот если с вируалом, то вызывается функция которая определена типом объекта(не типом переменной как в первом случае). А если вирутальная функция не переопределена в потомке, поиск продолжается в базовом классе. Где-то я читал как работает ключевое слово virtual на уровне машинного кода. Без указания virtual адрес функции сразу записывается в инструкцию машинного кода. А если с указан virtual, то адрес входа в функцию вычисляется из таблицы виртуальных методов которая содержится в адресном пространстве самого объекта. Как-то так.
Слов не хватает что бы выразить свою благодарность! 3 часа ебли мозгов на лекции в универе и нихуя не понятно, а здесь все понял за 20 минут, без воды и по делу.
Пришёл с НАЧАЛЬНОГО КУРСА C++ stepik. Там нихрена не понял, зато здесь всё ясно и понятно. Это всё, что нужно знать про этот курс. Я чих пых их задачи мудрёные, на которые можно часы своей жизни тратить и только запутаться
большое спасибо за продуманные, информативные видеоуроки! благодаря ним нашла ответы на многие интересующие вопросы и продолжаю пополнять свои знания в области программирования на с++
Но кто же ставит дизлайки. Это могут здесь специально делать только "враги народа и вредители не из той оперы". Как здесь, еще никто не смог доступно и детально объяснить непростые вещи из плюсов с идеальной дикцией и эрудицией .
Спасибо преогромное. Итак под всеми видео поставил лайки. Но конкретно это с данными примерами очень хорошо зашло. По большей части закрываю пробелы с Вашими видео. Но, чувствую, только сейчас, после Ваших уроков, начинает складываться целостная картина. А то уже расстраивался от недопонимания многих вещей. Сейчас же огромный стимул двигаться дальше.
А еще я бы подчеркнул именно тот момент, что во время присвоения Gun *gun=&submachinegun; Не смотря на то что тип переменной меняется, тип объекта на который указывает ссылка типа Gun, по прежнему остается типа SubmachineGun. Даже не смотря что список методов при обращении к этой ссылке может быть другой, это не значит что методы куда-то делись, просто через данную ссылку они не доступны. Так вот если член-функции имеют одинаковую сигнатуру, какую функцию Shoot вызывать? Из типа ссылки(Gun) или из типа объекта(SubmachineGun)? По умолчанию вызывается из типа ссылки, а при наличии ключевого слова virtual, вызывается функция из типа объекта. Вот где магия)
Лично для меня это трудно понять, но думаю после через некоторое количество попыток и обдумывания этой информации я смогу понять суть виртуальных функций. Я знаю как этим пользоваться, но не понимаю самой сути данного функционала. Спасибо за урок.
#SimpleCode , как всегда на высоте :) , но замечание нужно было сказать что указатель на базовый клас не имеет доступа к индивидуальним свойствам класса наследника ибо сбивает с толку как указатель на базовый клас может взаимодействовать с производным классом!!!(не обращайте внимание на ошибки не русский)
Думаю по принципу, как бы строгой иерархии, если мы заходим ссылаемся через главный вход родительского класса, мы с тем же успехом попадем в нужную нам квартиру, у которой своя особая реализация(полиморфизм) как если бы мы шли туда напрямую, через балкон, окно или вертолетную площадку. То есть мы получим "Bang! Bang! Bang". Все зависит от адреса взятого класса, и наличия ключевого слова virtual.
Будут ли в будущем уроки, с поддержкой библиотеки SDL, либо других графических биб. ? И вообще, будем ли делать начиная с мини-игр, до более менее качественных 3D ?✊
Про STL уже есть(следующие пару месяцев сам планирую потратить на увлекательный просмотр всего этого добра) А про игры не знаю. Наверно уже и игры есть, раз наш родной SimpleCode уже по c# уроки делает)
Получается в уроке #98, где был студент и студент-заочник, у которых был метод Learn(), мы неправильно писали реализацию? То есть всегда надо писать virtual и override, если переопределяется метод? Или есть случаи, когда не надо писать это?
А если у нас есть такая ситуация... Допустим, что игроку придётся как-то по - другому держать каждое оружие. Придётся тогда менять логику в классе Player для каждого конкретного метода типа shoot. Или можно в классе конкретного оружия указать поведение для него. Например класс Bazooka содержит метод шут, в котором реализуется тип стрельбы, то как игрок держит оружие, отдача, звук от выстрела и т.д.
Очень хорошие уроки! Одно но, стоило метод в классе Player назвать как-то иначе чем Shoot(), иначе возможно новички могут подумать что они должны обязательно называться одинаково для полиморфизма.
*Друзья, если вы решили изучать программирование и подписались на канал - рекомендую вам нажать колокольчик чтобы никогда не пропускать новые уроки!*
спасибо, а как же динамическое связывания? при переопределении виртуальной функции вызовы этой функции становятся динамическими. Во время выполнения программы, компилятор определяет какую функцию вызвать в соответсвии с типом объекта.
Передаю респект всем кто не забросил и дошёл до этого урока + автору за хорошее обучение. Я перешёл сюда с платного курса C++ Developer потому что хоть там и профессионалы, далеко не каждый сможет подробно и понятно объяснить материал (Там за 30 минут объяснили 10+ уроков Сергея😂)
То чувство когда половина уроков уже позади
@HessW да знаю я, знаю, просто жалко
@HessW можешь подсказать, для перехода на программирование в UE5 хватит базы или надо заранее изучить ещё системы сборки, работу с сетями, deep learning, computer science?
Посмотрел.Через 20 минут, я и тараканы начали аплодировать. Спасибо вам за качественное обьяснение на понятных примитивах.
Из слов в начале можно сделать вывод что virtual определяет полиморфизм в С++. Но если его не использовать то поведение в дочерних классах тоже переопределяется, это тоже подходит под описание полиморфизм. Разница лишь в том, что без виртуала вызовется функция которая определена типом переменной, если она не определена в классе потомке, то вызовется функция базового класса. А вот если с вируалом, то вызывается функция которая определена типом объекта(не типом переменной как в первом случае). А если вирутальная функция не переопределена в потомке, поиск продолжается в базовом классе. Где-то я читал как работает ключевое слово virtual на уровне машинного кода. Без указания virtual адрес функции сразу записывается в инструкцию машинного кода. А если с указан virtual, то адрес входа в функцию вычисляется из таблицы виртуальных методов которая содержится в адресном пространстве самого объекта. Как-то так.
Афигеть. Тебя смотрят серьезные ребята. Три слова бэнг и ни одной шутки про батю в здании.
Акстись
BADABOOM
P.S. Есть песня русская - бадабум
батя теперь в совсем другом здании)
@@dankn6155 школьники умерли ещё на массивах и на строках в стиле "C"
@@DigitRoach школьники, которые смотрели клипы Хованского, уже давно не школьники)))
Слов не хватает что бы выразить свою благодарность! 3 часа ебли мозгов на лекции в универе и нихуя не понятно, а здесь все понял за 20 минут, без воды и по делу.
оххх! ПОЛИМОРФИЗМ - ЭТО ПРОСТО БОМБА!!! ОГРОМНАЯ БЛАГОДАРНОСТЬ СЕРГЕЮ ЗА ДОХОДЧИВОЕ ОБЪЯСНЕНИЕ СТОЛЬ СЛОЖНОГО МАТЕРИАЛА!!!!
Пришёл с НАЧАЛЬНОГО КУРСА C++ stepik. Там нихрена не понял, зато здесь всё ясно и понятно. Это всё, что нужно знать про этот курс. Я чих пых их задачи мудрёные, на которые можно часы своей жизни тратить и только запутаться
Виртуальные методы класса c++. Ключевое слово virtual Ключевое слово override. ООП C++ Для начинающих #103
Спасибо большое, хорошо объясняете, и нравится что раскладываете все темы по кусочкам, удобно смотреть и понимать.
Пожалуйста!
РЕБЯТ НЕ ЛЕНИТЕСЬ ПЕРЕСМАТРИВАТЬ. ОЧЕНЬ СИЛЬНО ПОМОГАЕТ(КАПСОМ ТАК КАК ОЧЕНЬ ВАЖНО)
согласен, я лично уже забыл урок про указатель на функцию
Иду по второму кругу, это нормально, повторение мать учения, далее если надо третий, ну а ещё далее точечно по темам которые срочно нужны
@@ЭдуардГибадуллин-ц5к срочно нужны к экзамену?
@@ДмитрийНормов-ю6ц нет, просто фанатею, нравится
@@ЭдуардГибадуллин-ц5к ровытагптукпотщуплтукщпткерекрпкпкупкуркуртть
Спасибо за уроки,благодаря вам закрыл программирование в универе
Пожалуйста!
как успехи?) Где начал работать?
@@SaffronChipMCPE уже год как в сбертехе
@@rib0385 поздравляю! :D
@@rib0385 ого, за 1 год уже добрался до сбертеха :/
Великолепный урок, спасибо огромное. Вроде аж 20 минут, но посмотрел на одном дыхании:)
даже не заметил, как время прошло
Спасибо Сергей за просто и понятно изложенный материал !
Пожалуйста!
#virtual #override #ООП #SimpleCode #урокипрограммирования
очень полезно было. Спасибо, я аж засмотрелся
Очень хорошее объяснение! Спасибо!
большое спасибо за продуманные, информативные видеоуроки! благодаря ним нашла ответы на многие интересующие вопросы и продолжаю пополнять свои знания в области программирования на с++
Но кто же ставит дизлайки. Это могут здесь специально делать только "враги народа и вредители не из той оперы". Как здесь, еще никто не смог доступно и детально объяснить непростые вещи из плюсов с идеальной дикцией и эрудицией .
Чтобы его видео наверно в рекомендациях не появлялись
Я хз почему так мало у вас подписчиков , вы реально заслуживаете больше подписчиков . Я хочу на курсы и смотрю вас и все понимаю , спасибо вам
Отличный урок, особенно объяснение на реальном примере ;)
лучше обьяснений не встречал. рад познакомиться.
Спасибо! Такого толкового пояснения полиморфизма не встречал, многе стало на места.
Очень крутые примеры! Несколько раз хотел нажать лайк, но он уже стоит:)
Спасибо. Все ясно и понятно.
Один из самых интересных уроков)))
Рассказывает всё то что именно нужно без воды, классно
Спасибо за урок.
Спасибо за объяснение, зачем это нужно! Очень помогает не сдаваться))
Спасибо преогромное. Итак под всеми видео поставил лайки. Но конкретно это с данными примерами очень хорошо зашло. По большей части закрываю пробелы с Вашими видео. Но, чувствую, только сейчас, после Ваших уроков, начинает складываться целостная картина. А то уже расстраивался от недопонимания многих вещей. Сейчас же огромный стимул двигаться дальше.
Потрясающий ролик! Начинаешь (хотя бы на примитивном уровне) понимать, как осуществляли действия в любимых играх детства
скинь свой тг
Отличный канал !!!!!Просто и понятно объяснил все С++ . Спасибо
А еще я бы подчеркнул именно тот момент, что во время присвоения Gun *gun=&submachinegun; Не смотря на то что тип переменной меняется, тип объекта на который указывает ссылка типа Gun, по прежнему остается типа SubmachineGun. Даже не смотря что список методов при обращении к этой ссылке может быть другой, это не значит что методы куда-то делись, просто через данную ссылку они не доступны. Так вот если член-функции имеют одинаковую сигнатуру, какую функцию Shoot вызывать? Из типа ссылки(Gun) или из типа объекта(SubmachineGun)? По умолчанию вызывается из типа ссылки, а при наличии ключевого слова virtual, вызывается функция из типа объекта. Вот где магия)
Отдельное спасибо за объяснение того, для чего virtual и override необходимы!
Комментарий создан для продвижения видео! Спасибо, Сергей!
Искал хороший урок, а нашёл золотую жилу! Спасибо большое за ваши уроки!
Лично для меня это трудно понять, но думаю после через некоторое количество попыток и обдумывания этой информации я смогу понять суть виртуальных функций. Я знаю как этим пользоваться, но не понимаю самой сути данного функционала. Спасибо за урок.
Такая же история. Надо просто со временем подойти к этому, на подсознании есть флаг что такое есть рано или поздно он сработает
@@anatolyvatson2542 ну как успехи? =)
Очередное Спасибо!
Интересный урок, спасибо.
Наполеон!
А ну марш в торт обратно! Ты наказан!
Все чётко, без воды..
Благодарю за бесценную работу!
Огромное спасибо за видео!
Спасибо! Очень доходчивые и понятные объяснения)
твои видеоуроки заменяют целую учебную программу
Важный и понятный урок. Сергей, спасибо большое!!!
Вот кто переводит в сериалах Gun как "пистолет", а не "Пушка/ствол/огнестрел"!
Смотрю вас ещё со школы, лучший контент
Хорошо, что я нашел ваш канал.
#SimpleCode , как всегда на высоте :) , но замечание нужно было сказать что указатель на базовый клас не имеет доступа к индивидуальним свойствам класса наследника ибо сбивает с толку как указатель на базовый клас может взаимодействовать с производным классом!!!(не обращайте внимание на ошибки не русский)
Спасибо за качественные уроки
Огромное спасибо, Сергей, очень интересно и доходчиво!
void Overdoses(*Thank you){cout
Это тот самый контент, который будет актуален всегда, но или пока живо программирование)
Думаю по принципу, как бы строгой иерархии, если мы заходим ссылаемся через главный вход родительского класса, мы с тем же успехом попадем в нужную нам квартиру, у которой своя особая реализация(полиморфизм) как если бы мы шли туда напрямую, через балкон, окно или вертолетную площадку. То есть мы получим "Bang! Bang! Bang".
Все зависит от адреса взятого класса, и наличия ключевого слова virtual.
Пример с оружием просто пушкабомбапетарда, однозначно лайк:)
Спасибо за урок, чем дальше тем интереснее:)))
привет из 2023. Спасибо большое за уроки!
поддерживаю!!! уроки всегда на высоте )
спасибо за урок
Пожалуйста!
Автор - большое вам спасибо!
Комментарий для поддержки канала.
Спасибо за Ваши видео, очень все предельно ясно!
Спасибо за Вашу работу!
По кайфу, благодарствую!
Спасибо
Шикарно обьяснил , красава!!
Гениальное обьяснение!!!!! СПАСИБО!!!!
После ваших уроков кресты постепенно перестают быть неподъёмной "магией".
Большое спасибо!
спасибо огромное бро!!! все понятно рассказал!
На примере компьютерной игры в разы понятнее. Спасибо!!!
бооооже, это же ааааахуенно. и уроки, и полиморфизм. это... тупа топ. прекрасное изложение. суперлайк !
Будут ли в будущем уроки, с поддержкой библиотеки SDL, либо других графических биб. ? И вообще, будем ли делать начиная с мини-игр, до более менее качественных 3D ?✊
Про STL уже есть(следующие пару месяцев сам планирую потратить на увлекательный просмотр всего этого добра) А про игры не знаю. Наверно уже и игры есть, раз наш родной SimpleCode уже по c# уроки делает)
@@kemsekov6331 sdl, а не stl
STL, а не SDL
@@NONAME-wb7fv наконец-то дождался ответа)
пока смотрел сошел с ума два раза, спасибо
Получается в уроке #98, где был студент и студент-заочник, у которых был метод Learn(), мы неправильно писали реализацию? То есть всегда надо писать virtual и override, если переопределяется метод? Или есть случаи, когда не надо писать это?
Я думаю да, просто опускали для простоты. В таком случае мы не сможем пользоваться полиморфизмом (фишкой с указателями) как Сергей показал
#SimpleCode
спасибо
Полезный урок. Спасибо.
Спасибо за урок!
Помогите, я зависим... Это просто так интересноо
Дякую! Вже 103 уроки позаду, ух)
Благодарю за урок учитель! :)
Прекрасное объяснение!
Лучший!
За уроки по любому лайк!
Молодец во всем !!!
Реализовал так же только с настройками для звука гитары, мол чистый звук, дисторшн, овердрайв)
Спасибо большое!
BADABOOM!!! Спасибо, за урок!!!:)
Спасибо за "задолбаемся"! 18:40 :)
Удобная тема
СПАСИБО ЗА ТРУД
А если у нас есть такая ситуация... Допустим, что игроку придётся как-то по - другому держать каждое оружие. Придётся тогда менять логику в классе Player для каждого конкретного метода типа shoot. Или можно в классе конкретного оружия указать поведение для него. Например класс Bazooka содержит метод шут, в котором реализуется тип стрельбы, то как игрок держит оружие, отдача, звук от выстрела и т.д.
Иными словами указатель на РДС 1 может содержать может содержать в себе АН602 ( царь-бомба) у которой будет свой метод взрыва.
Крутой урок!!!
Очень хорошие уроки!
Одно но, стоило метод в классе Player назвать как-то иначе чем Shoot(), иначе возможно новички могут подумать что они должны обязательно называться одинаково для полиморфизма.
Спасибо *большущее* !
Спасибо)
Если мы у SMG вызовем метод Shoot и не передадим туда параметров, то пистолет-пулемёт выстрелит нам в ногу XD
ОФИГЕННО!
Спасибо братан
Браво 👏 👏 👏 👏 👏
Спасибо!!!
Кстати, в проге, которую написал Сергей, возможен случай, когда Player может стрелять объектами Player. xD
Vova Nahirny считай бьет кулаками👌
Невозможен. Так как метод принимает указатель только на класс Gun и унаследованные от него. И сигнатура у метода другая.
13:40 это явление называется ранним связыванием или статической типизацией? Расскажите про эти понятия?
Супер!