«Наследовать» - неправильное слово, так как оно имеет очень специфическое определение в C ++, которое вы не имеете в виду, но да, вы можете это сделать. Это законно:
class A {
protected:
class Nested { };
};
class B : public A {
private:
Nested n;
};
И код, который не находится в A или что-то, производное от A, не может получить доступ или создать экземпляр A :: Nested.