Наследование и конструкторы
Наследование и конструкторы
Ранее не показанная процедура создания (конструктор) для класса POLYGON может иметь вид
make_polygon (vl: LINKED_LIST [POINT]) is
-- Создание по вершинам из vl.
require
vl.count >= 3
do
...Инициализация представления многоугольника по элементам из vl ...
ensure
-- vertices и vl состоят из одинаковых элементов (это можно выразить
формально)
end
Эта процедура берет список точек, содержащий по крайней мере три элемента, и использует его для создания многоугольника.
Ей дано собственное имя make_polygon, чтобы избежать конфликта имен при ее наследовании классом RECTANGLE, у которого имеется собственная процедура создания make. Мы не рекомендуем так делать в общем случае, в следующей лекции будет показано, как давать процедуре создания класса POLYGON стандартное имя make, а затем использовать переименование в предложении о наследовании класса RECTANGLE, чтобы предотвратить коллизию имен.Приведенная выше процедура создания класса RECTANGLE имеет четыре аргумента: точку, служащую центром, длины двух сторон и ориентацию. Отметим, что компонент vertices применим к прямоугольникам, поэтому процедура создания для RECTANGLE создает список вершин vertices (четыре угла вычисляются по центру, длинам сторон и ориентации).
Общая процедура создания для многоугольников не удобна прямоугольникам, так как приемлемы только списки из четырех элементов, удовлетворяющих инварианту класса RECTANGLE. Процедура создания для прямоугольников, в свою очередь, не годится для произвольных многоугольников. Это обычное дело: процедура создания родителя не подходит для наследника. Нельзя гарантировать, что она будет удовлетворять его новому инварианту.
Например, если у наследника имеются новые атрибуты, то процедуре создания нужно будет их инициализировать, для чего потребуются дополнительные аргументы. Отсюда общее правило:
Правило наследования конструктора
При наследовании свойство процедуры быть конструктором не сохраняется.
Наследуемая процедура создания все еще доступна в наследнике, как и любой другой компонент родителя, но она не сохраняет статус конструктора. Этим статусом обладают только процедуры, перечисленные в предложении creation наследника.
В некоторых случаях родительский конструктор подходит и для наследника. Тогда его просто нужно указать в предложении creation:
class B inherit
A
creation
make
feature
...
где процедура make наследуется без изменений от класса A, у которого она также указана в предложении creation.
Более 800 000 книг и аудиокниг! 📚
Получи 2 месяца Литрес Подписки в подарок и наслаждайся неограниченным чтением
ПОЛУЧИТЬ ПОДАРОКЧитайте также
2. Конструкторы и деструкторы
2. Конструкторы и деструкторы Конструкторы и деструкторы являются специализированными формами методов. Используемые в связи с расширенным синтаксисом стандартных процедур New и Dispose конструкторы и деструкторы обладают способностью размещения и удаления динамических
R.12.1 Конструкторы
R.12.1 Конструкторы Конструктором называется функция-член, имя которой совпадает с именем класса, он используется для построения значений, имеющих тип данного класса. Если в классе есть конструктор, то каждый объект этого класса перед произвольным использованием будет
R.15.3 Конструкторы и деструкторы
R.15.3 Конструкторы и деструкторы Когда управление передается из точки запуска особой ситуации обработчику, то вызываются деструкторы для всех автоматических объектов, построенных с момента входа в проверяемый-блок.Если объект не был построен полностью, то деструкторы
Правило 34: Различайте наследование интерфейса и наследование реализации
Правило 34: Различайте наследование интерфейса и наследование реализации Внешне простая идея открытого наследования при ближайшем рассмотрении оказывается состоящей из двух различных частей: наследования интерфейса функций и наследования их реализации. Различие
Статические конструкторы
Статические конструкторы Вы уже знаете о том, что конструкторы используются для установки значения данных типа во время его создания, Если указать присваивание значения элементу статических данных в рамках конструктора уровня экземпляра, вы обнаружите, что это
Конструкторы
Конструкторы Mediachance Multimedia Builder MP3Сайт: http://www.mmbgroup.comРазмер: 20 МбСтатус: SharewareЦена: $60Все мы в детстве играли в конструкторы – от простых кубиков до груды железяк под названием «Школьный конструктор № 1». В эпоху компьютеров конструкторы никуда не делись (ведь компьютер и
Конструкторы
Конструкторы Mediachance Multimedia Builder MP3 Сайт: http://www.mmbgroup.comРазмер: 20 МбСтатус: SharewareЦена: $60Все мы в детстве играли в конструкторы – от простых кубиков до груды железяк под названием «Школьный конструктор N1». В эпоху компьютеров конструкторы никуда не делись (ведь компьютер и сам
Конструкторы класса
Конструкторы класса Для класса CObject определены два конструктора. Первый конструктор используется по умолчанию и не имеет параметров. Именно этот конструктор вызывается конструкторами классов, наследованных от CObject:CObject();Второй конструктор класса CObject называется
1.10 Конструкторы
1.10 Конструкторы Определение ostream как класса сделало члены данные зарытыми. Только функция член имеет доступ к закрытым членам, поэтому надо предусмотреть функцию для инициализации. Такая функция называется конструктором и отличается тем, что имеет то же имя, что и ее
5.5 Конструкторы и Деструкторы
5.5 Конструкторы и Деструкторы Если у класса есть конструктор, то он вызывается всегда, когда создается объект класса. Если у класса есть деструктор, то он вызывается всегда, когда объект класса уничтожается. Объекты могут создаваться как:1. Автоматический объект:
6.3.1 Конструкторы
6.3.1 Конструкторы Альтернативу использованию нескольких функций (перегрженных) составляет описание конструктора, который по заданнму double создает complex. Например:class complex (* // ... complex(double r) (* re=r; im=0; *) *);Конструктор, требующий только один параметр, необязтельно вызывать
7.2.6 Конструкторы и Деструкторы
7.2.6 Конструкторы и Деструкторы Для некоторых производных классов нужны конструкторы. Если у базового класса есть конструктор, он должен вызыватся, и если для этого конструктора нужны параметры, их надо предоставить. Например:class base (* // ... public: base(char* n, short t); ~base(); *);class derived :
8.5.5 Конструкторы
8.5.5 Конструкторы Функция член с именем, совпадающим с именем ее класса, называется конструктором. Если класс имеет конструктор, то он вызывается для каждого объекта этого класса перед тем, как этот объект будет калибо использован, см. #8.6.Конструктор не может быть virtual или
30. Конструкторы и деструкторы
30. Конструкторы и деструкторы Конструкторы и деструкторы являются специализированными формами методов. Используемые в связи с расширенным синтаксисом стандартных процедур New и Dispose конструкторы и деструкторы обладают способностью размещения и удаления динамических