




«Наследовать» - неправильное слово, поскольку оно имеет очень конкретное определение в C++, которое вы не имеете в виду, но да, вы можете это сделать. Это законно:
class A {
protected:
class Nested { };
};
class B : public A {
private:
Nested n;
};
И код, который не находится в A, или что-то, что происходит от A, не может получить доступ или создать экземпляр A :: Nested.
Хмм Что произойдет, если класс B предоставит метод доступа для Nested n? Вероятно, ошибка компиляции?
Вообще-то, нет. При объявлении методов B поиск имени также происходит в области действия класса B. А в области B доступен A :: Nested. Следовательно, A :: Nested & B :: Get_n () в порядке.
Хм, ты прав. A :: Nested доступен, поскольку B может возвращать A :: Nested из общедоступной функции. B он по-прежнему не может быть создан, поэтому интересно, что это приводит к ситуации, когда вызывающей стороне не разрешается сохранять возвращаемое значение B :: Get_n ().
Тебе стоит попробовать это! Придумать доказательство концепции не так уж сложно ...