4. Объемлющие классы
Сравним производные классы с классом Level1, который объемлет, а не наследует объект класса Level0. Для таких классов используют название "объемлющие классы", например:
class Level1 {
public: Level0 L0;
private: int d;
protected: int e;
public:
int f;
void f1();
};
// Непривелегированная функция
void fn() {
Level1 L1;
L1.L0.c =1;
L1.f = 2;
L1.L0.f0();
L1.f1();
}
// Компонентная функция
void Level1::f1() {
L0.c = 1;
d = 2; e = 3; f = 4;
L0.f0();
}
Доступность компонентов производного и объемлющего классов аналогична. Level0::a недоступен для компонентов класса Level1, а Level0::c доступен. Защищенный (protected) компонент Level0::b не доступен для более объемлющего класса.
Основное различие между объемлющим и производным классами состоит в способе доступа к наследуемым элементам. Всякий раз при доступе к элементу Level0 он задается конкретно, например L0.c, L0.f0() и т.д. Производный же класс ссылается к этим компонентам как к собственным.
Производный класс использует компоненты своего базового класса, в то время как объемлющий класс просто предоставляет место компонентам другого класса.
- Прядок вызова конструкторов в производных классах
- Производные классы: полиморфная функция
- 29) Конструкторы и деструкторы производных классов.
- R.10 Производные классы
- 3.4.3 Объявление производных классов
- Базовые и производные классы
- 4.1. Производные классы
- Предотвращение переопределения виртуальных членов производными классами
- Объявление производных классов