Виртуальное наследование c++. Ромбовидное наследование c++. Изучение С++ для начинающих. Урок

Поделиться
HTML-код
  • Опубликовано: 13 окт 2024
  • Cамый лучший способ сказать "спасибо" - поставить лайк и и поделиться уроком с друзьями. Это очень мотивирует создавать полезные уроки =)
    Множественное наследование c++ пример. ООП. Изучение С++ с нуля для начинающих. Урок #109
    goo.gl/N3fHEE
    Наследование в ООП пример. Что такое наследование. Для чего нужно наследование классов. ООП. C++ #98
    goo.gl/yFNiim
    Поддержка канала
    / simplecode
    Уроки по программированию
    Наша группа ВК smplcode
    Подписывайтесь на канал / @simplecodeit

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

  • @николай-г7ю3з
    @николай-г7ю3з 6 лет назад +169

    Я ещё не дошёл до этого урока. Сейчас изучаю массивы,но не зайти поставить лайк хорошиму преподавателю это грех

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

      Спасибо, ценю! =)

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

      Ну как? Дошел?

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

      Я дошла и планирую залайкать на этом канале всё что можно)

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

      @Данил Лафин он мог не заметить/вспомнить это сообщение

    • @николай-г7ю3з
      @николай-г7ю3з 3 года назад +9

      Нет, не дошёл. Подзабил на с++.,давно уже веб изучаю. С++ оказался мне не особо нужен, но я по нему и книг много прочитал, так что опыт пригождается. Иногда пишу проги для микроконтроллеров на языке Си. Не вижу смысла изучать что то если нет конкретной задачи и цели

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

    *Cамый лучший способ сказать "спасибо" - поставить лайк и и поделиться уроком с друзьями. Это очень мотивирует создавать полезные уроки =)*

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

      Спасибо! Но очень хотелось бы видеть это на реальных примерах, то есть какую то программку создать полезную. А то пока я не очень понимаю, для чего мы все это делаем, унаследуем что-то и т.п.)

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

      почему в одном примере КОНСТРУКТОР 2 класса наследника через двоеточие дополняется КОНСТРУКТОРОМ 1 наследуемого класса, а во втором примере достаточно добавить только в название наследуемый класс???

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

    #виртуальноенаследование #ромбовидноенаследование #SimpleCode #урокипрограммирования

  • @KurpatovInstagram
    @KurpatovInstagram 6 лет назад +22

    Спасибо! На таких примерах заходит еще лучше!

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

    Ля, шо то просмотров мало, надо репостить видос! Спс за урок!

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

    Я просто Худею от этих уроков
    Какие они классные!!!

  • @ankopechenychko3572
    @ankopechenychko3572 5 лет назад +9

    ♥♥♥ Господи, спасибо за Ваш труд и подробные уроки! ♥♥♥

  • @shohoch7800
    @shohoch7800 5 лет назад +174

    Сказал родителям что умею вызывать предков

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

      чё ответили?

    • @fluge_
      @fluge_ 2 года назад +12

      ответ убил

    • @danielluko7635
      @danielluko7635 Год назад +3

      @@aspidinton в психушку отправили

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

      @@danielluko7635 жалко

    • @anatolyvatson2542
      @anatolyvatson2542 Год назад +3

      Родители вызвали метод Process kill

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

    Спасибо за очередной урок.

  • @andrewbistroff1199
    @andrewbistroff1199 6 лет назад +13

    Спасибо Сергей за Шикарно изложенный материал!

  • @pubgr862
    @pubgr862 5 лет назад +32

    Инцест в мире классов 😂

  • @nap0le0nb0naparte7
    @nap0le0nb0naparte7 6 лет назад +12

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

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

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

  • @nikitross7466
    @nikitross7466 5 лет назад +8

    Хорошая подача, интересно послушать о шаблонах, синголтонах и рефлексии в таком же стиле. Урок супер!

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

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

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

    Очень интересно! Очень доходчиво, примеры мне нравятся! Спасибо большое! Но если бы я создавал игру, класс "воин" не содержал бы в себе характеристику "НР", ведь не может быть "воин" без рассы (как будто пустой доспех), он бы содержал, например, методы атак ближнего боя или ношения доспехов. А класс "орк" содержал бы в себе физические характеристики данной рассы, в том числе "НР". И при получении наследованием конечного класса, его методы и характеристики не двоились бы.)

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

      Т.к. он приводил пример с игрой фентези, он использовал класс Caracter (в котором имелись хп) для того чтобы реализовать ещё какую нибудь расу например эльфы, люди. Просто это удобнее не нужно каждой рассе отдельно писать хп. Может ты думаешь это переменная мелочь, а если бы там была логика с отниманием хп, регенерацией и т.д. Лучше написать несколько раз virtual, вместо того чтобы копипастись эту ерунду :D.

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

    Спасибо за понятный урок! лайк!

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

    Spasibo bolshoe.

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

    Спасибо, все хорошо。

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

    Супер! Шикарное объяснение с очень наглядными примерами. Премного балгодарен.

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

    Очень пригодилось , спасибо за отличные и понятные уроки!

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

    vidos ogon' avtor krasavec

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

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

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

    Спасибо!!!!!

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

    Спасибо

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

    Спасибо большое за данный урок друг!!!

  • @романМельситов
    @романМельситов 6 лет назад +5

    сергей, а будут уроки как работать с xml файлами?

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

    up

  • @____-xm5qi
    @____-xm5qi 5 лет назад +5

    большое спасибо за уроки, вы просто ЛУЧШИЙ!!! с меня Lamborghini (как стану богатым ).

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

      ну как, подаришь ламбу или нет ?

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

      А сейчас? Мне просто интересно как жизнь сложилась. Если спился, можешь не отвечать.

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

    хороший урок и интересные примеры, спасибо)

  • @КимЧенОрк
    @КимЧенОрк 4 года назад +5

    Ппц, комментов мало. А видео крутые и доступные.

  • @LenTos1337
    @LenTos1337 6 лет назад +37

    А почему это происходит вообще? Как ключевое слово virtual влияет на наши классы, что они в итоге создают только один базовый класс?

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

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

    • @exaliffeed5840
      @exaliffeed5840 4 года назад +11

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

    • @wasony.126
      @wasony.126 4 года назад

      Хороший вопрос

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

      При виртуальном наследовании классы-наследники наследуют не весь базовый класс, а какой-то конкретный его объект, поэтому и свойства совпадают

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

      Может кто-то в будущем читать будет, так что максимально как могу объясню. Когда вы используете виртуальное наследование, это обеспечивает, что даже если класс наследуется несколькими путями, будет только один экземпляр виртуального базового класса, который используется всеми этими путями(orcwarrior тоже считается, хотя он не наследует виртуально, но мы комбинируем его с множественным наследованием, и конечный класс (в данном случае orcwarrior) тоже виртуально наследует базовый класс). И вот при создании объекта производного класса, который использует виртуальное наследование, компилятор выделяет память для одного экземпляра виртуального базового класса. Еще можно дополнить, что когда orc и warrior обращаются к character, они используют указатель на character, чтобы получить доступ к его членам. Этот указатель указывает на один и тот же экземпляр character, независимо от того, от какого класса character наследуется.

  • @whynot3052
    @whynot3052 6 лет назад +7

    #SimpleCode
    ты крутой

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

    Здравствуйте Сергей! У меня возник такой вопрос: Может ли при таком наследовании базовый класс быть одновременно Абстрактным и Виртуальным?

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

      наличие чего либо виртуального и делает класс абстрактным. ибо в нем ничего нельзя реализовывать.

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

      @@revue6218 чисто виртуального*

    • @ТимерланБатаев
      @ТимерланБатаев 2 года назад

      Если ещё актуально: Абстрактные классы могут хранить в себе не меньше одной реализации виртуального метода, при этом можно описывать тело в других методах(в этом классе). Интерфейс может содержать ТОЛЬКО реализацию виртуальных методов, больше ничего:)

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

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

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

    у меня вопрос не по теме ролика, но очень хотелось бы узнать будут ли видео по созданию приложений на с++ с помощью конструктора форм? помню в vs2013 была возможность делать такие приложения, но в vs2017 я такого не нашел :(

  • @yusvel629
    @yusvel629 2 года назад +5

    Спасибо за урок! Можно ли вместо виртуального наследования использовать ключевое слово static в поле с XP? Получается данное поле будет одно на все объекты? Т.е вопрос, как наследуются статические поля и методы?
    Спасибо!)

    • @VeganaMaia-Nemo
      @VeganaMaia-Nemo Год назад +6

      Зачем? Тогда при создании ещё одного орка или воина или "ворк-оина" у всех у них будет ОДНО изменяемое поле HP. Ранили любой экземпляр любого не базового класса - ранили всех созданных персонажей по цепочке.

    • @КириллГусарев-р5х
      @КириллГусарев-р5х 2 месяца назад

      @@VeganaMaia-Nemo вот-вот

    • @КириллГусарев-р5х
      @КириллГусарев-р5х 2 месяца назад

      Нельзя

  • @АлексейБаринов-ь5н
    @АлексейБаринов-ь5н 3 года назад

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

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

    static HP?

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

    Dėkui

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

    Уровень и стиль начинающих зависит от уровня наставника. Но здесь почти все идеально рассказано о плюсах. Мелочи можно простить т. к. у многих других преподносят почти халтуру за 2-3 десятка "левых" уроков.

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

    В примере с персонажем, вы не передаете _HP_ а делаете для простоты конструкторами по умолчанию.
    Но вот вопрос, я попробовал передать _HP_ в конструктор _OrcWarrior_
    Компилятор заругался _Для Character не существует конструктора по умолчанию_
    Помогла запись для конструктора: *OrcWarrior(int HP) : Warrior(HP), Orc(HP), Character(HP)*
    Судя по отладчику все норм, заходит только в класс _Character_ а в остальных выводит строку.
    Или он мне не показал просто как скачет по конструкторам передавая HP из потомка в родителя и вплоть до деда.
    *Результат положительный* , *Является ли эта запись правильной?* _(Или есть подводные камни при более сложной реализаций)_

    • @pavelios3577
      @pavelios3577 5 лет назад

      Добавил конструктор по умолчанию.

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

    Хотел бы спросить про методы для такого случая. Если у каждого класса будет одинаковый метод с разной реализацией, то компилятор кричит о неоднозначности. Я видел видео на похожую тему у вас, но тут дело в ромбовидном наследовании. Нельзя прописать метод для OrkWarrior, если такой же метод есть у обоих наследников. Как это решить?

  • @АртемЖуков-п7ш
    @АртемЖуков-п7ш 3 года назад +1

    Всё понятно, но самый главный вопрос: как инициализировать поле int hp при создании объекта?

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

      В конструкторе.
      OrcMage() : hp(100) {}

  • @4sat564
    @4sat564 3 года назад +1

    а разве в первом варианте не будет возникать ошибка при обращении к companyName в объекте GraphicCard, так как переменная будет двусмысленной?

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

      Будет, если не уточнять, из какого родительского класса "достать" companyName.
      Нужно самому конкретизировать:
      graphic card("AMD", "Samsung");
      cout

  • @АртёмАртём-ю4ы
    @АртёмАртём-ю4ы 3 года назад +1

    Было бы решением данной проблемы передача через конструктор в классы Orc и Warrior класса Character по ссылке?

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

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

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

      Это возможная реализация, но с точки зрения расходования памяти и процессорного времени нецелесообразно. Потому что при передаче по ссылке поля объекта Character придётся копировать во вновь генерируемый объект класса Orc или Warrior и выделять под него память.

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

    А в первом случае как сделать, чтобы информация не задваивалась? Virtual там не работает, требует конструктор по умолчанию.

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

    Можете, подсказать, пожалуйста! Я сделала virtual наследование для первого примера с графической картой. Выдалась ошибка "для класса Component отстуствует конструктор по умолчанию", ну я сделала конструктор по умолчанию, в результате при запуске программы не вызывается вообще конструктор Component . Что делать?

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

      я додала в конструктор компонент вивід рядка

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

      Компилятор намекает, что тебя ждут на кухне.

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

      Если кому-то будет актуально, надо передавать значения 2х stringов (условно GraphicCard GTX1070("Palit","Samsung"); ). В этом то и суть этого метода. Надеюсь автор вопроса уже сама все понимает за это время)

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

    а если захотим задать определенный ХП как задать ?
    как передать данные

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

    Здравствуйте! Можно ли использовать виртуальное наследование не для ромбовидного? И второй вопрос: можно ли наследоваться таким же образом от больше, чем двух родителей?
    _____A____
    _/_/__\_\
    B_C__D_E
    _\_\__/_/
    _____F____

    • @ДмитрийКошелев-п5э
      @ДмитрийКошелев-п5э 4 года назад +1

      На первый вопрос, я не имею представления где еще можно использовать виртуальное наследование, и помоему это так, ведь в самом начале ролика сказали что "это ромбовидное или как его еще называют виртуальное...". А второй вопрос, если судить по логике то должно быть можно.

    • @ДмитрийКошелев-п5э
      @ДмитрийКошелев-п5э 4 года назад +1

      @@dufget Это вы даете. Виртуальное наследование не = интерфейсу. К тому же зачем вы сюда приплетаете интерфейс, если смысл вопроса данного человека был другой. Он спросил - "Можно ли использовать виртуальное наследование не для ромбовидного?". Но ромбовидное и виртуальное наследование это одно и тоже, просто иногда говорят "ромбовидное наследование", а иногда "виртуальное наследование". - вот так я ответил.

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

    А как теперь установить HP для Орка, Война и ОркоВойна? Я имею ввиду через конструктор. Больше интересует ОркоВоин. Точно также как с компьютерным железом, только надо добавить пустые конструкторы по умолчанию? Или это излишне и проще сетер использовать?

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

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

  • @ЖеняКошельник-з2щ
    @ЖеняКошельник-з2щ Месяц назад

    наследие ромбом понятно. меня выбило из колеи начало: GPU и Memory часть класа GraphicCard. Вот какая беда: мы 2 раза вызываес конструктор Component, который по идее просто перезапишет фирму производитель. Как я понимаю: GraphicCard должен наследоваться от Component, и получит свое поле производителя, потом членами своего класа должен создать екземпляры GPU и Memory, в которых будут свои фирмы-производители. Либо я чтото не понял...

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

    gc.Memory::companyName
    Это норм синтаксис?

  • @ЕгорРодин-ю7л
    @ЕгорРодин-ю7л 4 года назад +1

    А как доступиться до переменной HP, если не применять виртуальное наследование?
    спасибо за урок!

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

      нужно написать либо Orc::HP или Warrior::HP

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

      Нужно самому конкретизировать. Например, в случае с базовым классом Component:
      graphic card("AMD", "Samsung");
      cout

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

    Привет, не с кем посоветоваться, можешь пожалуйста ответить на один важный вопрос для меня? Заранее благодарен. Учусь на 2 курсе тех.вуза, хочу летом пройти стажировку, знание базовых сортировок( вставкой, пузырьком, перестановкой, слиянием), базовых алгоритмов, есть шанс что меня примут? Но непосредственного опыта программирования в какой-то области нету, пусть тот же Qt или с базами данных тоже не работал

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

      Не знаю примут или нет, но пробовать всегда стоит, если не попытаться - точно не примут.

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

      спасибо за ответ

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

      Знание алгоритмов сортировок вообще не нужно в реальной работе. А вот понимание структур данных крайне важно (списки, словари, коллекции, наборы и т.д.)

    • @ДмитрийНормов-ю6ц
      @ДмитрийНормов-ю6ц 2 года назад

      @@deniskozak5997 , как у вас успехи спустя 4 года?

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

      взяли?

  • @ԲագրատԳալստյան
    @ԲագրատԳալստյան 6 лет назад +2

    Спасибо за урок ! Вот обидно ... Видео по програмированю набирает 3к просмоторов, а какойто фунтик боле милона -_-

    • @pubgr862
      @pubgr862 5 лет назад

      Բագրատ Գալստյան Фунтика ставят родители для детей чтоб не мешали делать свои дела, далеко не все родители в этот момент смотрят уроки по программированию 🤷🏿‍♂️

    • @ДмитрийКошелев-п5э
      @ДмитрийКошелев-п5э 4 года назад +1

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

    • @ДмитрийКошелев-п5э
      @ДмитрийКошелев-п5э 4 года назад

      К тому же это С++, и вы не рассмотрели другие языки, ведь на других языках могут быть намного больше программистов и просмотров

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

    Блин, из видео снова сюда заглянул, чтобы убедиться, действительно ли это очередной, 114 урок, а не перепрыгнул штук 10 нечаянно...

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

    А если у базовых классов будут методы с одинаковым именем и разной реализацией, то какая из них попадёт в генерируемый объект?

    • @ТимерланБатаев
      @ТимерланБатаев 2 года назад +1

      Конечно странный вопрос, во первых, как мы можем иметь 2 базовых класса, а во вторых, если мы хотим вызвать метод конкретного класса наследника, то мы конкретно должны написать: ::class::method().

    • @Твойотец-г5в
      @Твойотец-г5в Год назад +1

      Конечно странный ответ. Наследник может спокойно иметь более чем 1 базовый класс, как например классы подмешивания.

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

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

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

      Через поле видимости конкретного класса. Где-то здесь был пример ::ClassName::FieldName

  • @АнтонКолотуша
    @АнтонКолотуша 2 года назад +7

    Орк..... Как же часто это слово мы сейчас используем

  • @TheWladberlin
    @TheWladberlin 5 лет назад +7

    Графиккарты, чипы, память - я электронщик, моя тема, и тут епт... орки пошли...

  • @Наноэлектроникс
    @Наноэлектроникс 10 месяцев назад

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

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

    Уважаемый Сергей, спасибо за видео. Не понятно только, зачем ты перешёл с компьютера на игру?

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

    Как то тема не раскрыта, ну написали virtual А HP конкретно то от куда браться будут из орка или из воина??? Вот я вообще ни чего не понял

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

      Да, интересно если будут в конструкторах инициализироваться поля hp в базовых классах, то с каким в итоге значением останется объект генерируемого класса. По идее с тем, что в последнем конструкторе

  • @егорщербанов
    @егорщербанов 6 лет назад

    Пытался переписать, что-то не работает.
    #include
    #include
    #include
    #include
    #include
    using namespace std;
    class compon {
    public:
    compon(string compname) {
    cout

    • @АлександрПетров-ь7я
      @АлександрПетров-ь7я 5 лет назад

      Пересмотри конструктор класса "graphic", там ты ошибся в передачи параметра. Тоесть нужно не cpucompname, а gpucompname

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

    прррррррррррограммирование

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

    А в каких языках еще реализовано виртуальное наследование?

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

      Из Википедии: "В список языков, поддерживающих множественное наследование, входят: Io, Eiffel, C++, Dylan, Python, некоторые реализации классов JavaScript (например, dojo.declare), Perl, Curl, Common Lisp (благодаря CLOS), OCaml, Tcl (благодаря Incremental Tcl), а также Object REXX (за счёт использования классов-примесей)."

  • @Vlad-pn1hh
    @Vlad-pn1hh 6 лет назад

    Может кто знает, как обратиться в каждое поле имени компании из финального класса?

    • @md.403
      @md.403 6 лет назад +1

      Можно через указатели на базовые классы. Вот так:
      ((GPU*)&card)->company; // Cи-стиль
      а лучше так:
      static_cast(&card)->company; // C++ стиль
      Выглядит, конечно, не очень. Так что я бы убрал поле company в прайват и сделал из этих двух выражений два паблик метода в GraphicCard.
      const string& GraphicCard::GetMemoryCompanyName() { return static_cast(this)->company; }
      const string& GraphicCard::GetGPUCompanyName() { return static_cast(this)->company; }
      Может есть и другой способ, не знаю. Но даже если и есть, в любом случае получается как-то странно и неудобно. Лично мне пока ни разу не попадались ситуации, где реально бы пригодилось такое наследование (интерфейсы не в счёт!). Здесь по моему, (как и во многих подобных ситуациях) даже с точки зрения моделирования правильнее сделать композицию. Класс GraphicCard должен просто включать в себя объекты Memory и GPU. С чего бы ему их наследовать? Это всё равно что сказать, что человек наследует свой мозг. А наследование GraphicCard я бы сделал разве что от Component, поскольку нам могла бы пригодится возможность обращаться с ней, как с отдельным компонентом, имеющим своего отдельного производителя, например MSI, и т.д.
      Так то урок хороший. Пишу это не для того чтобы докопаться до примера)) а просто самому хотелось бы понять, зачем всё таки такое в реальности нужно. Много где видел подобные примеры, и всегда они выглядят как-то надуманно, либо я просто чего-то не понимаю.

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

      @@НикитаГончаров-ы4ц так,.. идите,.. идите отсюда! Кто вас сюда впустил, здесь начинающие!

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

      @@md.403 разобрался?)

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

    Есть мнение, что виртуальное наследование как и дружественные методы - костыли при плохом дизайне.

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

      @@dufget Переопределение виртуальных методов в наследнике и виртуальное наследование вещи совершенно разные ) Внимательно посмотрите урок.

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

    Спросите меня через год, добился я чего-либо в АйТи.

    • @TheWladberlin
      @TheWladberlin 5 лет назад

      Ну как дела?!! ...или еще рано?

    • @ДмитрийКошелев-п5э
      @ДмитрийКошелев-п5э 4 года назад

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

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

      @@ДмитрийКошелев-п5э Всё пошло не по плану, так что теперь сижу в вебе и потихоньку изучаю JS. весь плейлист просмотрел но сменил направление

    • @ДмитрийКошелев-п5э
      @ДмитрийКошелев-п5э 4 года назад

      @@Quazaru Что это так? Что случилось что сменил направление?

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

      @@ДмитрийКошелев-п5э Ну во-первых, плюсы тогда я изучал на отьебись, так что и практики мало было. Заданий по плюсам меньше и найти где попрактиковаться сложнее, самоучкой так же стать в разы сложнее, так что выбрал веб

  • @Nasya_Is_My_Name
    @Nasya_Is_My_Name 2 года назад +2

    и орк это персонаж... поймут Украинцы.. эх

  • @ВітяКоміссаров
    @ВітяКоміссаров 2 года назад

    спасибо

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

    up

  • @ЯрославГоловко-ф6и
    @ЯрославГоловко-ф6и 4 года назад

    спасибо