Абстрактный класс с++ пример. Чисто виртуальная функция. virtual. override. Полиморфизм ООП C++

Поделиться
HTML-код
  • Опубликовано: 1 ноя 2017
  • Понравилось видео или оказалось полезным? Подпишись!
    Если вам нравятся мои уроки, вы хотите поддержать меня и развитие канала, то можете сделать это тут! =)
    www.donationalerts.ru/r/simple...
    или тут
    / simplecode
    Абстрактный класс с++ пример. Чисто виртуальная функция. virtual. override. Полиморфизм ООП C++ Для начинающих. Урок #104
    Исходный код урока:
    topic-142292681_35943080
    Виртуальные методы класса c++. Ключевое слово virtual. Ключевое слово override. ООП. C++ #103
    goo.gl/cuW4cY
    Уроки по программированию
    Наша группа ВК smplcode
    Подписывайтесь на канал / @simplecodeit

Комментарии • 173

  • @SimpleCodeIT
    @SimpleCodeIT  6 лет назад +65

    *Друзья, если вы решили изучать программирование и подписались на канал - рекомендую вам нажать колокольчик чтобы никогда не пропускать новые уроки!*

    • @user-je5yr6ol6c
      @user-je5yr6ol6c 6 лет назад +1

      Будут ли в будущем уроки, с поддержкой библиотеки SDL, либо других графических биб. ? И вообще, будем ли делать начиная с мини-игр, до более менее качественных 3D ?✊

    • @deniskozak5997
      @deniskozak5997 6 лет назад +3

      лучше чем-то более серьезным заниматься, нежели игрушками

    • @user-je5yr6ol6c
      @user-je5yr6ol6c 6 лет назад +2

      Еще вопрос, разработка нейро-сетей на ЯП - C++ , будет ? Ведь, на нем тоже можно их разрабатывать, чтобы уже более-менее понимать структуру и их алгоритм.

    • @bobrovskij100
      @bobrovskij100 4 года назад

      Снимите, пожалуйста, видео о том, как разделять проект на файлы и как это всё подключать между собой, как подключать сторонние библиотеки, создавать свои, или просто как подключить готовый класс к проекту. Как пользоваться hex-редакторами и cmake для С++.

    • @elemantro5257
      @elemantro5257 4 года назад

      мне кажется или это паттерн стратегия?

  • @DenKof81
    @DenKof81 5 лет назад +77

    От кофемолки до ножа всего за 31 VJUHHH! :)

  • @Chepotay
    @Chepotay 6 лет назад +53

    Вжух! И я вспомнил как работают абстрактные классы в С++.

    • @SimpleCodeIT
      @SimpleCodeIT  6 лет назад +11

      Всё правильно понял! =)

  • @proKaps
    @proKaps 6 лет назад +254

    Годнота. Это самые лучшие уроки вообще которые я когда-либо встречал. Правда смотрю на скорости 1.5 х)

    • @iryandriver
      @iryandriver 5 лет назад +16

      Чайники на 0.25 смотрят))

    • @developer-miracle
      @developer-miracle 5 лет назад +7

      а я с обычной скоростью, но только ставлю на паузу, чтоб повторить все действия в IDE ;)

    • @user-lz1yb6qk3f
      @user-lz1yb6qk3f 3 года назад +5

      ×2

    • @romasenkevich9907
      @romasenkevich9907 3 года назад

      Райан Купер можно смотреть в х4, но это нужно будет в код ютуба лезть в гугл хроме

    • @Kokurorokuko
      @Kokurorokuko 2 года назад +1

      @@developer-miracle как по мне, лучше сначала посмотреть, а потом писать код самому. Заодно и проверяешь, как запомнил.

  • @kaynsolo
    @kaynsolo 6 лет назад +53

    Тема с оружием крутяк! Спасибо.

  • @SimpleCodeIT
    @SimpleCodeIT  6 лет назад +17

    #абстрактныйкласс #чистовиртуальнаяфункция #ООП #SimpleCode #урокипрограммирования

  • @SeshAlex
    @SeshAlex 6 лет назад +60

    Спасибо. Вы лучший педагог с++:)))

  • @soundsforgamers4056
    @soundsforgamers4056 Год назад +9

    Дружище, у тебя есть талант объяснять людям непонятные вещи на понятных примерах. Всё очень доходчиво. Надеюсь ты вернешься на RUclips и будешь дальше использовать свой талант в просветительских целях. Желаю удачи.

  • @sgimancs
    @sgimancs 4 года назад +18

    Это конкуренты с их барахлом похоже ставят дизлайки т. к. до этого уровня изложения не тянут.

  • @Riderwin
    @Riderwin 6 лет назад +64

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

    • @MrMes
      @MrMes 4 года назад +1

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

    • @rednil8242
      @rednil8242 4 года назад +22

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

    • @Matissed
      @Matissed 3 года назад +17

      @@rednil8242 забей, это ебаные токсики, думающие, что они дохуя знающие программисты

    • @_Yes_.
      @_Yes_. Год назад +2

      @@MrMes чел

    • @princessmary5556
      @princessmary5556 11 месяцев назад

      @@rednil8242 И прочитав пару книг, понимают, что это ещё проще, чем казалось вначале.

  • @Salavat1k
    @Salavat1k 5 лет назад +46

    . class Player
    |
    class Weapon (virtual)
    | | |
    class Gun class Bazooka class Knife
    |
    class SubMashineGun
    Получается так:
    - класс "Игрок" содержит функцию "Стрелять",
    - соответственно возникает вопрос "чем стрелять?" и в функции производится обращение к абстрактному классу "Оружие" .
    - у класса три наследника пистолет, базука, нож, а у пистолета наследник пулемет. Через наследование передаются все свойства класса "оружие".
    - В майн создается объект "игрок", вызывается функция "стрелять" в ней указывается на оружие вообще, а потом уточняется то, чем именно действовать.
    Т.о. получается, что виртуальный класс просто служит для предварительного указания, того, что с оружием будет производится какое то действие в классах наследниках, а само действие зависит от типа выбранного оружия.
    Ок. надеюсь понял правильно. Спасибо.

    • @user-iq5of8vu7e
      @user-iq5of8vu7e 4 года назад

      стрелять могут и мобы

    • @shibu5180
      @shibu5180 Год назад +6

      @@user-iq5of8vu7e а у нас нету мобов

  • @user-ne6dt8gv3o
    @user-ne6dt8gv3o 4 года назад +8

    Лучшие уроки по программированию во вселенной!

  • @user-lr2ls1ix3z
    @user-lr2ls1ix3z 5 лет назад +41

    Мужик, ты просто лучший, только благодоря тебе я захотел стать программистом (и у меня это получается) и меня не выперли с универа. Самые топовые уроки по программированию.

    • @nazarmarhotskiy7372
      @nazarmarhotskiy7372 5 лет назад +1

      +

    • @Matissed
      @Matissed 3 года назад +3

      как успехи?

    • @mrgold8267
      @mrgold8267 Год назад +2

      Ну вот уже 3 года прошло, стал прогером? где работаешь, кем работаешь ?

  • @tsohee9145
    @tsohee9145 5 лет назад +5

    Вы настолько хорошо объясняете, что я на прошлом уроке уже что то похожее написал, правда вместо виртуальной сделал просто пустую функцию. Все и так работает.

  • @user-ny4zk7gj7n
    @user-ny4zk7gj7n 2 месяца назад +1

    ООП - это красота!🤩

  • @nazarmarhotskiy7372
    @nazarmarhotskiy7372 5 лет назад +15

    Контент просто супер. Твои уроки не раз спасали меня когда не знал как лабораторку сделать. Спасибо огромное.

  • @alexlyt9104
    @alexlyt9104 6 лет назад +26

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

  • @minsk150
    @minsk150 3 года назад +4

    НЕ перестаю радоваться! как суперски все обьясняется! Спасибо снова!

  • @user-pk2ul8of6p
    @user-pk2ul8of6p 4 года назад +3

    Эти уроки просто спасают меня перед экзаменом!!! Спасибо большое

  • @Ermine882
    @Ermine882 6 лет назад +23

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

  • @tesalovskiy
    @tesalovskiy 5 лет назад +4

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

  • @veter4699
    @veter4699 6 лет назад +21

    Очередной раз спасибо за интересный урок!

  • @segars9604
    @segars9604 8 месяцев назад

    Благодарю за бесценную работу!

  • @user-nb1wv1vu9m
    @user-nb1wv1vu9m 2 месяца назад +2

    Кайф, спасибо за отличное объяснение

  • @user-yb4jd6re6k
    @user-yb4jd6re6k 4 года назад +2

    супер, все очень понятно. Спасибо за классную работу.

  • @meatboy4010
    @meatboy4010 6 лет назад +3

    Перед курсачем по ООП - самое то!

  • @user-ne3vq6jv8z
    @user-ne3vq6jv8z 6 лет назад +14

    прекрасное изложение. лайкаю все подряд. желаю Вашем каналу успеха

    • @SimpleCodeIT
      @SimpleCodeIT  6 лет назад +4

      Благодарю за поддержку!

  • @riinariina41
    @riinariina41 5 лет назад +2

    Огромное спасибо за уроки. Очень помогают

  • @dezign_er
    @dezign_er 6 лет назад +17

    Спасибо за видео !

  • @user-nw5iw5ew9z
    @user-nw5iw5ew9z 3 года назад

    Огромное спасибо, Сергей, очень интересно и доходчиво!

  • @kaisaryerdenbekov1588
    @kaisaryerdenbekov1588 6 лет назад +44

    Кто-то влепил чисто абстрактный дизлайк.

  • @user-ut7tj6bp4t
    @user-ut7tj6bp4t 4 года назад +2

    Я был неправ, ЭТО самый интересный урок из плейлиста, а не предыдущий))

  • @vladalu9794
    @vladalu9794 6 лет назад +2

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

  • @satisfiedCapybara
    @satisfiedCapybara 4 года назад +2

    Спасибо большое за ваши старания!

  • @user-bc4vi6hl2f
    @user-bc4vi6hl2f 6 лет назад +4

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

  • @bulba1995
    @bulba1995 Год назад +1

    Еще один хороший урок ,мое почтение.

  • @user-jl7et8gx5u
    @user-jl7et8gx5u 6 лет назад +6

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

  • @Ivan-Shyriaiev
    @Ivan-Shyriaiev 4 года назад

    *ТОП* Уроки ! Спасибо большое!

  • @lizagodaeva4678
    @lizagodaeva4678 4 года назад

    Вы великолепны, спасибо!

  • @konstantingorskiy5716
    @konstantingorskiy5716 5 лет назад +1

    Чувак, просто супер видосы , в универе очень помогает

  • @Phocusnick
    @Phocusnick Год назад +1

    Это просто идеально, тем-более во время дистанционки.

  • @user-xg9yp2cs5x
    @user-xg9yp2cs5x 2 года назад

    Спасибо! Просто и ясно.

  • @user-fy1tn2nq6z
    @user-fy1tn2nq6z 8 месяцев назад

    Вы легенда!

  • @garivasiukov1897
    @garivasiukov1897 2 месяца назад

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

  • @yugenepopov2014
    @yugenepopov2014 6 месяцев назад

    Огромнейшее спасибо

  • @vladimirdiadichev6140
    @vladimirdiadichev6140 6 лет назад +14

    Спасибо

  • @simanerush
    @simanerush 5 лет назад +2

    Спасибо огромное!

  • @user-jt4fx8fd7c
    @user-jt4fx8fd7c 8 месяцев назад

    Лучший ❤

  • @Cyanidez07
    @Cyanidez07 3 года назад +1

    круто! потренировался со своими классами+ попробовал передать в функцию массив адресов по ссылке используя std::vector.

  • @evgeniisharaborin8071
    @evgeniisharaborin8071 2 года назад

    Спасибо за крутое объяснение)

  • @seredas3565
    @seredas3565 Год назад

    Спасибо за рекомендацию отладчика, без него было сложнее
    годные советы)

  • @yurabazhan2485
    @yurabazhan2485 3 года назад

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

  • @justcode5626
    @justcode5626 3 года назад +2

    Четко получилось!

  • @bama2619
    @bama2619 2 года назад

    Спасибо Все понятно

  • @deniskozak5997
    @deniskozak5997 6 лет назад +10

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

  • @seregapikulev9834
    @seregapikulev9834 4 года назад +1

    Спасибо!

  • @McGewen
    @McGewen Год назад

    Круто!Дуже вдячний!

  • @moratoPg
    @moratoPg 6 лет назад +6

    Дуже хороший урок , і взагалі всі уроки мають прекрасне розяснення . Спочатку трохи здається все запутаним бо багато англійськомовних слів і невидно всього коду на екрані , але якщо переглянути пару разів то вимальовується більш зрозуміла логіка того що автор відео хоче передати . Перед уроком бажано доповідати які знання вже потрібно мати щоб зрозуміти дане відео Дякую за уроки , взагалі прекрасна подача інформації , всім раджу переглядати дані відео декілька разів щоб краще усвоїти конкретну тему уроку

    • @llllNEOllllchannel
      @llllNEOllllchannel 5 лет назад +3

      ??? зачем этот c++, лучше буду украинский учить

    • @romsik2949
      @romsik2949 4 года назад

      @@llllNEOllllchannel Выучил?

    • @llllNEOllllchannel
      @llllNEOllllchannel 4 года назад

      @@romsik2949 дi

  • @miroslavklyukovsky683
    @miroslavklyukovsky683 2 года назад +1

    Спасибо!!!

  • @Mark-wn4op
    @Mark-wn4op 3 года назад

    Скорость x2 и это просто лучшие видео

  • @user-up8cn6ri9k
    @user-up8cn6ri9k Год назад

    Спасибо брат

  • @Ivan-Shyriaiev
    @Ivan-Shyriaiev 4 года назад +4

    Круть! Сделал пару штук
    #include
    #include
    #include
    #include
    #define cls system("cls")
    #define gtch _getch()
    using namespace std;
    void colorText(int color);
    class Transport
    {
    public:
    Transport()
    {
    name = "noname";
    }
    Transport(string name)
    {
    this->name = name;
    }
    string getName()
    {
    return name;
    }
    void setName(string name)
    {
    this->name = name;
    }
    virtual void ride() = 0;
    virtual void info() = 0;
    private:
    string name;
    };
    class Sportcar :public Transport
    {
    class Engine;
    public:
    Sportcar() :Transport()
    {
    engine.turnEngineOff();
    }
    Sportcar(string name) :Transport(name)
    {
    }
    void turnEngineOn()
    {
    engine.turnEngineOn();
    }
    void turnEngineOff()
    {
    engine.turnEngineOff();
    }
    void coutEngineInfo()
    {
    engine.showEngine();
    }
    void ride() override
    {
    if (engine.boolWorking())
    cout

    • @cnota69
      @cnota69 3 года назад +1

      Хах, прикольно чел. Интересно было почитать историю)

    • @ruslandad365
      @ruslandad365 7 месяцев назад

      Нихрена тебя понесло)

  • @sergbo3114
    @sergbo3114 4 года назад +1

    Вот недавно в процессе написания одного из классов зачудил. При отладке выяснил что при вызове виртуальной функции вызывается не функция в потомке, что как бы было должно быть при переопределении в дочернем классе, а вызывалась функция в базовом. И когда я убрал пустую реализацию из базового класса, то Runtime начал выдавать ошибку "abort()". Оказалось, по невнимательности я вызывал эту функцию из конструктора)) Получалось что класс еще был не сконструирован. Т.е. как раз получилось тот случай "что будет если инстанцировать абстрактный класс", ну в данном случае просто виртуальную функцию, но я думаю разница не большая. Получится просто рантайм еррор.

  • @ruslandad365
    @ruslandad365 7 месяцев назад +1

    Ляяя
    Теперь я начинаю понимать как работает Анрил

  • @user-kb6qd8rg4g
    @user-kb6qd8rg4g 4 года назад

    спасибо

  • @Nikitunr2013
    @Nikitunr2013 2 года назад

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

  • @t.on.y
    @t.on.y 6 лет назад +30

    а ты расскажешь про win32 api?

    • @exploserester6041
      @exploserester6041 Год назад

      Это для интерфейса? Если да, лучше используй Qt)

  • @gagikarakelyan6014
    @gagikarakelyan6014 4 года назад

    лучший

  • @ivanliaz
    @ivanliaz 2 месяца назад +1

    Ну вот и геймдев пошёл))

  • @arismendi7101
    @arismendi7101 6 лет назад +2

    Здраствуйте, можете сделать видео о рандомной генерации лабиринта с помощью рекурсивной функции?

  • @user-ol9es1ch9x
    @user-ol9es1ch9x Год назад

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

  • @flepjack
    @flepjack 3 года назад

    Понято

  • @OXEED12
    @OXEED12 23 дня назад +1

    👍

  • @annademidenko6356
    @annademidenko6356 5 лет назад +3

  • @user-ld3gf1tl1f
    @user-ld3gf1tl1f Месяц назад

    бро даже в 2024 году твои уроки имбире

  • @ekaterina1991
    @ekaterina1991 6 лет назад

    Спасибо огромное, Сергей. Подскажите, пожалуйста, а как лучше в main реализовывать смену оружия? С помощью просто switch или есть более грамотная реализация?

    • @TheWladberlin
      @TheWladberlin 4 года назад +1

      Массив указателей, думаю

  • @shestak.E
    @shestak.E 10 месяцев назад +1

    Чисто теоретически можно такой вид программы реализовать с помощью функции с вложенным switch

  • @WormsWolf1
    @WormsWolf1 6 лет назад +1

    Немного не понял как будут деструкторы вызываться. У класса Weapon будет вызван деструктор или нет?

  • @flatmapper
    @flatmapper 6 лет назад +1

    Нам в универе говорят, что существует 2 вида полиморфизма : времени компиляции и времени выполнения. Какой в данном уроке показываете вы?

  • @user-sx4se9sd5c
    @user-sx4se9sd5c 4 года назад

    Сергей, а вы с Unreal Engine знакомы?

  • @user-je5yr6ol6c
    @user-je5yr6ol6c 6 лет назад +6

    Будут ли в будущем уроки, с поддержкой библиотеки SDL, либо других графических биб. ? И вообще, будем ли делать начиная с мини-игр, до более менее качественных 3D ?✊

    • @SimpleCodeIT
      @SimpleCodeIT  6 лет назад +5

      Игры будут в отдалённом будущем на Unity.

    • @user-je5yr6ol6c
      @user-je5yr6ol6c 6 лет назад +2

      Еще вопрос, разработка нейро-сетей на ЯП - C++ , будет ? Ведь, на нем тоже можно их разрабатывать, чтобы уже более-менее понимать структуру и их алгоритм.

  • @user-yx5wd5yy6h
    @user-yx5wd5yy6h 3 года назад

    вжууух - и мы переопределили виртуальную функцию

  • @dimaan29
    @dimaan29 3 года назад

    Тема с оружием достаточно наглядна до тех пор, пока не появляются указатели (геморр). По вашим урокам учу С#, то есть все ваши уроки на С++ перевожу в С#, только вот беда, указатели никак не хотят работать в этом майкрософтовском языке, даже через режим unsafe. Поэтому никак не могу заставить класс Player работать со всеми видами оружия на C#

  • @alexeytrofimov2232
    @alexeytrofimov2232 3 года назад

    ✊🏻

  • @KocTu4eK
    @KocTu4eK 2 года назад

    в прошлом уроке сильно не хватает пэинта (имхо), пришлось самому додумывать «кто такой этот ваш полеморфизм» на ходу урока, что очень отвлекало

  • @Viamsupervadetvadens
    @Viamsupervadetvadens 6 лет назад +4

    up

  • @mariasparrow5965
    @mariasparrow5965 4 года назад

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

  • @GottyMintly
    @GottyMintly 3 года назад

    Разработчик: потеет несколько дней, работая над кодом для шутера.
    Пистолет: стреляет
    Пистолет-пулемет: стреляет
    Гранатомёт: стрелеят
    Нож: доброе утро))0)

  • @user-zg9du7nu9q
    @user-zg9du7nu9q 6 месяцев назад

    напоминает создание конфига вооружения в ARMA 2

  • @tolegator2623
    @tolegator2623 2 года назад

    А можно в абстрактном родительском классе объявить статическое поле? Оно будет доступно всем потомкам?

  • @nokompromis2297
    @nokompromis2297 4 года назад +2

    Knife.Shoot()...Нож же и шпионский бывает...

  • @alexandrsargsyan2202
    @alexandrsargsyan2202 2 года назад

    like

  • @user-pashaspr
    @user-pashaspr 3 года назад

    Прикольно,если туда пули как то пристроить)

  • @mulahivan
    @mulahivan 2 года назад

    Ну, не сложно

  • @Max-hc8we
    @Max-hc8we 5 лет назад

    Можете объяснить в чём смысл абстрактного класса? Ведь с тем же успехом я могу написать:
    class Weapon {
    public:
    void virtual Shoot( ){ }
    };
    Это будет виртуальный метод без реализации. Согласен, будет возможность создать объект данного класса, но тогда, опять же, можно не писать никакой реализации

    • @TheWladberlin
      @TheWladberlin 4 года назад +2

      Я думаю просто для удобства. Смысл объединить под одним классом какую-то область - в данном случае это "оружие". И далее в классе Player ты обращаешься только к этому классу.

    • @serzhant7169
      @serzhant7169 4 года назад +3

      В том то и дело что нам нужен класс от которого нельзя создавать объекты. Это тебе сейчас хорошо, что у тебя метод возвращает void и ты просто написал { }, а если метод будет не void? Будешь писать return что-то? костыль получается

  • @stenzoautomatic
    @stenzoautomatic 5 месяцев назад +2

    Красавчик, Серёга ты как там? Жив, здоров? Отзовись ( если что то он с Украины, и говорил что из-за войны пока не сможет поддерживать канал). Или может кто в курсе как он? Жалею что у меня не было такого препода!!!

  • @rachelraichi9494
    @rachelraichi9494 Год назад

    14:07 я сначала подумала, что напишет stab😅

    • @sleepyNovember_project
      @sleepyNovember_project 4 месяца назад

      Ну получается стреляем ножами, тоже вполне себе неплохо

  • @user-ni9tf5yr6m
    @user-ni9tf5yr6m 4 года назад

    Уууу !Террорист ! Взрывать людей учишь (Like❤)

  • @Igorkornilovspb
    @Igorkornilovspb 3 года назад

    С бадабумом так и не задалось )

  • @Vov4ik048
    @Vov4ik048 3 года назад

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