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