Программирование >>  Структурное программирование 

1 ... 195 196 197 [ 198 ] 199 200 201 ... 342


Иерархия наследования может быть произвольно глубокой в пределах физических ограничений конкретной системы.

Иерархии являются полезным инструментом для понимания и управления сложностью. В связи с ростом сложности программного обеспечения C-f-f- обеспечивает механизмы поддержки иерархических структур посредством наследования и полиморфизма.

Для преобразования типа указателя базового класса в тип производного класса можно использовать явное приведение типов. Такой указатель не должен разыменовываться, если он действительно не указывает на объект типа производного класса.

Защищенный уровень доступа служит промежуточным уровнем защиты между открытым доступом и закрытым доступом. Защищенные элементы базового класса могут быть доступны только элементам и друзьям базового класса и элементам и друзьям производного класса; никакие другие функции не могут иметь доступа к защищенным элементам базового класса.

Защищенные элементы используются для расширения привилегий производных классов; этих привилегий лишены функции, не относящиеся к классу или не являющиеся дружественными ему.

Множественное наследование указывается двоеточием (:) после имени производного класса и перечислением списка разделенных запятыми базовых классов после двоеточия. Для вызова конструкторов базового класса в конструкторе производного класса используется список инициализаторов элементов.

При порождении класса базовый класс может быть объявлен как public (открытое наследование), protected (защищенное наследование) или private (закрытое наследование).

При порождении класса как public открытые элементы базового класса становятся открытыми элементами производного класса, а защищенные элементы базового класса становятся защищенными элементами производного класса.

При защищенном наследовании открытые и защищенные элементы базового класса становятся защищенными элементами производного класса.

При закрытом наследовании открытые и защищенные элементы базового класса становятся закрытыми элементами производного класса.

Базовый класс может быть прямым или косвенным базовым классом производного класса. Прямой базовый класс явно перечисляется в заголовке при объявлении производного класса. Косвенный базовый класс явно в заголовке производного класса не перечисляется; он наследуется через два или более уровней иерархии классов.

Если элемент базового класса не подходит для производного класса, мы можем просто переопределить этот элемент в производном классе.

Важно различать отношения является и содержит . При отношении содержит объект одного класса содержит объекты другого класса как элементы. При отношении является объект типа производного



класса может также рассматриваться как объект базового класса типа. Является - это наследование. Содержит - это композиция.

Объект производного класса можно присваивать объекту базового класса. Этот вид присваивания имеет смысл, потому что производный класс имеет элементы, соответствующие каждому из элементов базового класса.

Указатель на объект производного класса может быть неявно преобразован в указатель на объект базового класса.

Указатель базового класса можно преобразовать в указатель производного класса, используя явное приведение типов. Он должен указывать на объект производного класса.

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

Чтение объявлений производных классов может приводить к недоразумениям, поскольку в них не показаны унаследованные элементы, которые тем не менее присутствуют в производных классах.

Отношение содержит дает примеры создания новых объектов путем объединения существующих классов

Отношения знает - это объекты, содержащих указатели или ссылки на другие объекты, так что они могут связаться с этими объектами.

Конструкторы объектов-элементов вызываются в той последовательности, в которой объявлены объекты. При наследовании конструкторы базового класса вызываются в той последовательности, в которой указано наследование, и до вызова конструктора объекта производного класса.

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

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

Класс может быть порожден более, чем от одного базового класса; такое порождение называется множественным наследованием.

Множественное наследование зазывается двоеточием (:) с последующим списком базовых классов, разделенных запятыми.

Конструктор производного класса вызывает конструкторы всех своих базовых классов, используя списки инициализаторов элементов. Конструкторы базового класса вызываются в той последовательности, в которой эти базовые классы объявляются в процессе наследования.



Терминология

абстрагирование базовый класс библиотеки классов деструктор базового класса деструктор производного класса друзья базового класса друзья производных классов закрытое наследование закрытый базовый класс защищенное порождение защищенный базовый класс защищенный элемент класса иерархическое соотношение иерархия классов инициализатор базового класса класс-элемент клиент класса ключевое слово protected композиция

конструктор базового класса конструктор по умолчанию базового класса

конструктор производного класса косвенный базовый класс множественное наследование наследование

настройка программного обеспечения неопределенность в множественном наследовании

объект-элемент объектно-ориентированное

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

базового класса повторное использование кода подкласс

производный класс простое наследование прямое наследование базовый класс прямой ациклический граф стандартизованные компоненты программного обеспечения суперкласс

указатель на объект базового класса указатель на объект производного класса указатель базового класса указатель производного класса управление доступом к элементу

Типичные ошибки программирования

9.1 Рассмотрение объектов базового класса как объектов производного класса может вызвать ошибки.

9.2. Явное приведение типа указателя базового класса, который указывает на объект базового класса, к типу указателя производного класса и затем ссылка на элементы производного класса, которые не существуют в этом объекте.

9.3. При переопределении в производном классе функции-элемента базового класса принято вызывать версию базового класса и после этого выполнять некоторые дополнительные операции. При этом ссылка на функцию-элемент базового класса без использования операции разрешения области действия может вызвать бесконечную рекурсию, потому что функция-элемент производного класса будет в действительности вызывать сама себя.

9.4. Присваивание объекта производного класса объекту соответствующего базового класса и затем попытка сослаться в этом новом объекте базового класса на элементы, имеющиеся только в объектах производного класса.



1 ... 195 196 197 [ 198 ] 199 200 201 ... 342

© 2006 - 2024 pmbk.ru. Генерация страницы: 0.001
При копировании материалов приветствуются ссылки.
Яндекс.Метрика