logo
Производные классы в C++

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() и т.д. Производный же класс ссылается к этим компонентам как к собственным.

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