Лекция 8. Динамический полиморфизм I (Программирование на C++, часть 1)

Поделиться
HTML-код
  • Опубликовано: 19 ноя 2024

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

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

    К примеру с квадратом и прямоугольником (56.00). Кажущаяся антиномия легко устраняется небольшим изменением семантики класса. Базовый класс (абстрактный) пусть реализует не понятие "квадрат", а понятие "фигура с (по крайней мере) одним размером": OneSizedShape. От него породить квадрат, окружность, отрезок (закрыв абстрактность). От OneSizedShape породить класс (абстрактный опять), добавляющий ещё одно поле: TwoSizedShape (сематика - "фигура с двумя (по крайней мере) размерами). От него - классы "прямоугольник", "эллипс" и др.

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

    Предостережение от вызова виртуального метода в конструкторе и деструкторе (последние секунды) выглядит несколько упрощённым. Более подходящая трактовка: You _can_ (выделение моё) call a virtual function in a constructor, but be careful. It may not do what you expect. In a constructor, the virtual call mechanism is _disabled_ (выделение моё) because overriding from derived classes hasn’t yet happened. [isocpp.org/wiki/faq/strange-inheritance#calling-virtuals-from-ctors]

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

      Кстати, пример, демонстрирующий, что современные компиляторы умеют корректно вызывать виртуальные функции из конструкторов: ideone.com/V38VBe

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

      @@vadimvinnik Ваш пример показывает прямой вызов функции-члена. Уберите из вашего примера virtual, и ничего принципиально не изменится.

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

    На 07.42 и на слайде - грубая ошибка: "полкласс является надмножеством" - на самом деле нет. У подкласса больше членов данных и методов, но объектов больше именно в надклассе - потому что объектами надкласса A являются как все объекты подкласса B1, так и все объекты подкласса B2. На самом деле, причина этого недоразумения - путаница в том, множеством чего именно следует считать класс: множеством объектов или множеством свойств. Чтобы путаницу устранить, следует обратиться к классической логике, а именно - к закону обратного отношения между объёмом и содержинием понятия. Подкласс - шире по содержанию и уже по объёму, надкласс - наоборот: беднее содержинием и шире по объёму.

    • @LOL-nq3ky
      @LOL-nq3ky 4 года назад

      Хороший комментарий, но не совсем уместный. Просто посмотрите на название слайда, да и вообще на весь контекст.