Дочерний класс в памяти

Поделиться
HTML-код
  • Опубликовано: 7 сен 2024
  • Благодаря наследованию мы можем достичь полиморфизма, то есть мы можем передать объект дочернего класса там где от нас требуют родительского. Но как-же это происходит на самом деле в памяти?
    И оказывается что большинство компиляторов решают данную проблему очень просто, с помощью элегантной упаковки объекта, где один и тот-же адрес указывает как на объект суперкласса, так и на объект подкласса.

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

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

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

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

    Спасибо большое за уроки и объяснения!

  • @Carnotaures
    @Carnotaures Месяц назад

    Видео уже 9 лет. Странно, что лайков так мало. Эту информацию мало где найти можно.

  • @user-ji6ip7ou8d
    @user-ji6ip7ou8d Год назад +1

    Меня интересовало то как в аамяти реализовано наследование. Оказалось все очень просто: чтение наследника до конца розмера исходного класса

  • @mrspacer1
    @mrspacer1 7 лет назад +1

    Спасибо за видео. Очень познавательно. Но поясните как быть с инстанцированием. Подходит ли эта логика для экземпляров классов? Интересно было бы узнать как располагается в памяти связка родитльский объект + экземпляр и дочерний объект + экземпляр.

  • @danilishei
    @danilishei 7 лет назад +1

    Вот это было полезно!

  • @user-wp7mz8ru1b
    @user-wp7mz8ru1b 8 лет назад

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

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

    А что, если мы переопределили виртуальный метод foo1 в классе В? Та функция, которая принимает в себя А будет выполнять перегруженный метод или базовый?

  • @fusome
    @fusome 7 лет назад

    т.е. перекликаясь с предыдущим видео про наследование - дочерний класс не может быть преобразован в суперкласс или родительский потому, что родительский класс знает только свои объекты и методы, но ничего о дочерних(если очень грубо говоря), но дочерний, в свою очередь использует весь потенциал родительского, так как ему доступно все от родителя. Я правильно Вас понял?

  • @thomasmorgan9043
    @thomasmorgan9043 9 лет назад

    Спасибо, интересные видео снимаете. Вы больше по системной части специализируетесь? Интересует дизассемблирование исходного кода на C/C++ представление ООП в ASM. К примеру, методы классов представляются так foo(this, a, b, c) В какой литературе можно почитать об этом подробнее?

    • @VladimirMozhenkov
      @VladimirMozhenkov  9 лет назад

      Thomas Morgan Хмм. Я даже сам не знаю где такое искать. Не занимался дизассемблированием никогда. То что методы классов именно так выражаются я знал (есть языки, которые так всё ещё и делают).

    • @thomasmorgan9043
      @thomasmorgan9043 9 лет назад

      Vladimir Mozhenkov а какой материал вы используете делая эти уроки? Также еще меня интересует заголовок exe файлов. Таблицы импорта, смещения и т. д. есть литература такая?

    • @VladimirMozhenkov
      @VladimirMozhenkov  9 лет назад +1

      Thomas Morgan Совершенно разный, иногда узнаю что-то из общения с другими программистами, иногда из личной практики, иногда из документации...
      Бывает из книг, но в этом случае книг не было. Тут шло пересечение некоторых блогов программистов и (почти стыдно признаться) википедии.

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

    А когда передача копированием осуществляется объекта дочернего класса в функцию, принимающую объекты родительского класса, копируется только "родительская" часть? Или весь объект дочернего класса целиком?

  • @GameAnnouncements
    @GameAnnouncements 9 лет назад

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

    • @VladimirMozhenkov
      @VladimirMozhenkov  9 лет назад +1

      ヤンコヴィッチ アンドリー Возможно вам нужно что-то вроде "обещаний" ruclips.net/video/K_AgeuYXmQ8/видео.html
      Если нет, то оборачиваете вашу функцию внутри другой, которая проверяет если предыдущая завершилась, если нет, то просто сразу выходит. И именно эту функцию вы теперь запускаете.

  • @ShAdoo00w
    @ShAdoo00w 7 лет назад

    Владимир, здравствуйте. Следуя видео, верно ли суждение, что объект дочернего класса занимает больше памяти чем объект родительского (если предположить, что все свойства и методы публичные)? Спасибо!

    • @depishdev6942
      @depishdev6942 7 лет назад

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

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

    Не понял..... какие ещё ссылки на методы в объекте? По вашему так количество не виртуальных методов влияет на размер объекта класса?

  • @yz4228
    @yz4228 9 лет назад

    Владимир, запишите видео про кодировки(UTF-8, UTF-16, Unicode), что это такое, зачем придумали

    • @VladimirMozhenkov
      @VladimirMozhenkov  9 лет назад

      Егор Захарик Что-то вроде такого: ruclips.net/video/OG9gsFvGtSE/видео.html

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

    Интересно, у какого процента людей которые заахотели поблагодарить автора даннного видео, пропало желание это делать когда они поняли, что вводить руквизиты им надо вручную, переписывая их с экрана?
    Ох... автор еще и биткоин адрес указал)))
    PS. 8:25 - реквизиты

  • @dutnum5766
    @dutnum5766 8 лет назад

    Со множественным наследованием такое не прокатит.

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

    А если у нас есть класс С
    допустим Класс С и Б наследуют класс А то как это будет в памяти ?

  • @TwoSecondsB4
    @TwoSecondsB4 8 лет назад +1

    Я один заметил пасхалку про Double D?

    • @mrshurukan
      @mrshurukan 7 лет назад

      В чем пасхалка заключается?

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

      Serious Sam Double D

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

    Добрый день, Володя.
    В первую очередь хочу сказать, что фраза «доброго времени суток» не совсем грамотная и некоторых людей (вроде меня) коробит. Лучше сказать «здравствуйте» или «добрый день» (в данном случае день - это и есть сутки).
    Ну и второе: в объекте все же присутствуют ссылки не на все методы (называть функциями их не совсем корректно), а только на виртуальные.
    А в целом хорошо рассказывайте! 👍

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

    1. Немонятно про какой язык идёт речь.
    2. Нет ни слова про виртуальность.

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

      ооп это не язык программирования этот стиль программирования

  • @Ivan-qb7kc
    @Ivan-qb7kc 7 лет назад

    Мммм... функции не хранятся в объектах :/