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

  Рет қаралды 11,275

Computer Science Center

Computer Science Center

Күн бұрын

compscicenter.ru/
Лекция № 8 в курсе "Программирование на C++, часть 1" (осень 2018).
Преподаватель курса: Валерий Михайлович Лесин

Пікірлер
@vadimvinnik
@vadimvinnik 5 жыл бұрын
К примеру с квадратом и прямоугольником (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 Жыл бұрын
@@vadimvinnik Ваш пример показывает прямой вызов функции-члена. Уберите из вашего примера virtual, и ничего принципиально не изменится.
@vadimvinnik
@vadimvinnik 5 жыл бұрын
На 07.42 и на слайде - грубая ошибка: "полкласс является надмножеством" - на самом деле нет. У подкласса больше членов данных и методов, но объектов больше именно в надклассе - потому что объектами надкласса A являются как все объекты подкласса B1, так и все объекты подкласса B2. На самом деле, причина этого недоразумения - путаница в том, множеством чего именно следует считать класс: множеством объектов или множеством свойств. Чтобы путаницу устранить, следует обратиться к классической логике, а именно - к закону обратного отношения между объёмом и содержинием понятия. Подкласс - шире по содержанию и уже по объёму, надкласс - наоборот: беднее содержинием и шире по объёму.
@LOL-nq3ky
@LOL-nq3ky 4 жыл бұрын
Хороший комментарий, но не совсем уместный. Просто посмотрите на название слайда, да и вообще на весь контекст.
Hilarious FAKE TONGUE Prank by WEDNESDAY😏🖤
0:39
La La Life Shorts
Рет қаралды 44 МЛН
ССЫЛКА НА ИГРУ В КОММЕНТАХ #shorts
0:36
Паша Осадчий
Рет қаралды 8 МЛН
Лучшая Frontend архитектура на примере собеседования
15:52
Матвей Клёнов | Frontend-разработчик
Рет қаралды 3,4 М.
Лекция 6. Классы (Программирование на C++, часть 1)
1:55:52
Иерархия памяти компьютера
28:51
Введение в программирование
Рет қаралды 7 М.