18.3.1. Наследование и композиция
18.3.1. Наследование и композиция
Реализация класса PeekbackStack с помощью закрытого наследования от IntArray работает, но необходимо ли это? Помогло ли нам наследование в данном случае? Нет.
Открытое наследование – это мощный механизм для поддержки отношения "ЯВЛЯЕТСЯ". Однако реализация PeekbackStack по отношению к IntArray – пример отношения "СОДЕРЖИТ". Класс PeekbackStack содержит класс IntArray как часть своей реализации. Отношение "СОДЕРЖИТ", как правило, лучше поддерживается с помощью композиции, а не наследования. Для ее реализации надо один класс сделать членом другого. В нашем случае объект IntArray делается членом PeekbackStack. Вот реализация PeekbackStack на основе композиции:
class PeekbackStack {
private:
const int static bos = -1;
public:
explicit PeekbackStack( int size ) :
stack( size ), _top( bos ) {}
bool empty() const { return _top == bos; }
bool full() const { return _top == size()-1; }
int top() const { return _top; }
int pop() {
if ( empty() )
/* обработать ошибку */ ;
return stack[ _top-- ];
}
void push( int value ) {
if ( full() )
/* обработать ошибку */ ;
stack[ ++_top ] = value;
}
bool peekback( int index, int &value ) const;
private:
int _top;
IntArray stack;
};
inline bool
PeekbackStack::
peekback( int index, int &value ) const
{
if ( empty() )
/* обработать ошибку */ ;
if ( index 0 || index _top )
{
value = stack[ _top ];
return false;
}
value = stack[ index ];
return true;
}
* Решая, следует ли использовать при проектировании класса с отношением "СОДЕРЖИТ" композицию или закрытое наследование, можно руководствоваться такими соображениями: если мы хотим заместить какие-либо виртуальные функции базового класса, то должны закрыто наследовать ему;
* если мы хотим разрешить нашему классу ссылаться на класс из иерархии типов, то должны использовать композицию по ссылке (мы подробно расскажем о ней в разделе 18.3.4);
* если, как в случае с классом PeekbackStack, мы хотим воспользоваться готовой реализацией, то композиция по значению предпочтительнее наследования. Если требуется отложенное выделение памяти для объекта, то следует выбрать композицию по ссылке (с помощью указателя).
Более 800 000 книг и аудиокниг! 📚
Получи 2 месяца Литрес Подписки в подарок и наслаждайся неограниченным чтением
ПОЛУЧИТЬ ПОДАРОКЧитайте также
Моникеры и композиция
Моникеры и композиция Моникеры часто составляются из других моникеров, чтобы с помощью текстового описания пути можно было осуществлять навигацию по иерархиям объектов. Чтобы обеспечить простую поддержку этого типа управления, в СОМ предусмотрена стандартная
2. Наследование
2. Наследование Процесс, с помощью которого один тип наследует характеристики другого типа, называется наследованием. Наследник называется порожденным (дочерним) типом, а тип, которому наследует дочерний тип, называется порождающим (родительским) типом.Ранее известные
Правило 34: Различайте наследование интерфейса и наследование реализации
Правило 34: Различайте наследование интерфейса и наследование реализации Внешне простая идея открытого наследования при ближайшем рассмотрении оказывается состоящей из двух различных частей: наследования интерфейса функций и наследования их реализации. Различие
Композиция и стили в дизайне интерьеров
Композиция и стили в дизайне интерьеров Создание дизайна – непростое занятие. От идеи до готового интерьера – длинный и нелегкий путь. Главная задача, которую выполняет дизайнер, – разработка интерьера помещения, соответствующего индивидуальности хозяина, его
Наследование
Наследование Следующим принципом ООП является наследование, означающее способность языка обеспечить построение определений новых классов на основе определений существующих классов. В сущности, наследование позволяет расширить возможности поведения базового класса
5. Композиция
5. Композиция Связь классов сущностей типа композиция, так же как и две предыдущие, не принадлежит к виду рекурсивной связи.Композиция (или, как ее еще иногда называют, композитная агрегация) – это взаимосвязь одного родительского класса сущностей с несколькими дочерними
18.3.4. Композиция объектов
18.3.4. Композиция объектов * Есть две формы композиции объектов: композиция по значению, когда членом одного класса объявляется сам объект другого класса. Мы показывали это в исправленной реализации PeekbackStack;* композиция по ссылке, когда членом одного класса является
Наследование
Наследование Пожалуй, самая важная возможность, предоставляемая программисту средствами языка Си++, заключается в механизме наследования. Вы можете наследовать от определенных ранее классов новые производные классы. Класс, от которого происходит наследование,
Наследование
Наследование Класс может быть унаследован от другого класса. Класс, от которого наследуют, называют базовым классом (надклассом, предком), а класс, который наследуется, называется производным классом (подклассом, потомком). При наследовании все поля, методы и свойства
Композиция
Композиция По статистике, самый ненавистный предмет у учеников и студентов музыкальных учебных заведений – сольфеджио. Самый ненавистный комплекс упражнений в школе танца – у станка. А в рисунке, фотографии и прочих «изобразительных» предметах самым сложным моментом
5.3. Композиция кадра
5.3. Композиция кадра Громадная щука, сфотографированная рыболовом, может выглядеть грозным чудовищем, если заснять ее, бьющуюся в сетях, или безобидным полуфабрикатом для ухи, брошенным в корзину или ведро. Попробуйте сфотографировать человека в свете, льющемся из
Композиция
Композиция В большинстве случаев пейзажу традиционно свойственна горизонтальная компоновка кадра, но это вовсе не обязательно. Все зависит от выбранного вами сюжета: если главный элемент расположен вертикально, стоит, конечно, развернуть камеру.Первое правило —
Композиция
Композиция Необходимо определить, что именно вы хотите подчеркнуть, выделить в фотографии. Подумайте, нужно ли усилить резкость, контраст, чтобы показать на фото мужественное лицо, изношенное временем, дождем и жарой старое заброшенное судно, или, наоборот, смягчить
Композиция
Композиция Выстраивайте кадр с учетом скорости и направления движения, оставляя перед движущимся объектом свободное пространство. Объект не должен останавливаться перед «стенкой» – граница кадра создает эффект остановки движения.Чтобы добиться эффекта движения,