compscicenter.ru/ Лекция № 8 в курсе "Программирование на C++, часть 1" (осень 2018). Преподаватель курса: Валерий Михайлович Лесин
Пікірлер
@vadimvinnik5 жыл бұрын
К примеру с квадратом и прямоугольником (56.00). Кажущаяся антиномия легко устраняется небольшим изменением семантики класса. Базовый класс (абстрактный) пусть реализует не понятие "квадрат", а понятие "фигура с (по крайней мере) одним размером": OneSizedShape. От него породить квадрат, окружность, отрезок (закрыв абстрактность). От OneSizedShape породить класс (абстрактный опять), добавляющий ещё одно поле: TwoSizedShape (сематика - "фигура с двумя (по крайней мере) размерами). От него - классы "прямоугольник", "эллипс" и др.
@vadimvinnik5 жыл бұрын
Предостережение от вызова виртуального метода в конструкторе и деструкторе (последние секунды) выглядит несколько упрощённым. Более подходящая трактовка: 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]
@vadimvinnik5 жыл бұрын
Кстати, пример, демонстрирующий, что современные компиляторы умеют корректно вызывать виртуальные функции из конструкторов: ideone.com/V38VBe
@princessmary5556 Жыл бұрын
@@vadimvinnik Ваш пример показывает прямой вызов функции-члена. Уберите из вашего примера virtual, и ничего принципиально не изменится.
@vadimvinnik5 жыл бұрын
На 07.42 и на слайде - грубая ошибка: "полкласс является надмножеством" - на самом деле нет. У подкласса больше членов данных и методов, но объектов больше именно в надклассе - потому что объектами надкласса A являются как все объекты подкласса B1, так и все объекты подкласса B2. На самом деле, причина этого недоразумения - путаница в том, множеством чего именно следует считать класс: множеством объектов или множеством свойств. Чтобы путаницу устранить, следует обратиться к классической логике, а именно - к закону обратного отношения между объёмом и содержинием понятия. Подкласс - шире по содержанию и уже по объёму, надкласс - наоборот: беднее содержинием и шире по объёму.
@LOL-nq3ky4 жыл бұрын
Хороший комментарий, но не совсем уместный. Просто посмотрите на название слайда, да и вообще на весь контекст.