Чтобы понять частное наследование, вы должны сначала понять публичное наследование.
Если у вас есть следующее:
class Base
{
public:
void SomeFunc();
};
class Pub : public class Base {};
Это означает, что разрешено следующее:
Pub aPub;
Base &basePart = aPub;
Вы можете взять производный класс и получить ссылку (или указатель) на базовый класс. Вы также можете сделать это:
Pub aPub;
aPub.SomeFunc();
То, что было открыто в Base
, открыто в Pub
.
Публичное наследование означает, что каждый, где бы он ни находился, может получить доступ к компонентам базового класса управляемого класса.
Частное наследование немного отличается:
class Priv : private class Base {};
Priv aPriv;
Base &basePart = aPriv;
Последняя строка вообще не работает . Частное наследование означает, что функции и классы only , которые могут выполнять эту операцию, являются либо прямыми членами Priv
, либо друзьями Priv
. Если вы напишите этот код вне Priv
участника или друга, не удастся скомпилировать .
Аналогично: * * тысяча тридцать-четырь
Priv aPriv;
aPriv.SomeFunc();
Работает, только если это член или друг Priv
.
Частное наследование означает, что только члены или друзья производного класса могут получить доступ к компонентам базового класса. Таким образом, функции-члены могут вызывать часть базового класса производного класса, но никто во внешнем мире не может.
Когда вы публично выводите класс из другого класса, вы говорите, что производный класс «является» базовым классом. Это как раз один из тех типов. Когда вы в частном порядке наследуетесь от базового класса, вы скрываете его от внешнего мира. Это означает, что вы используете реализацию в базовом классе для реализации вашего производного класса, но больше никому это не нужно знать. Производный класс «реализован в терминах» базового класса.