Вы явно указали, что базовый класс наследуется как частный подобъект производного класса.Так что он недоступен вне определения класса.
Из стандарта C ++ 17 (14.2 Доступность базовых классов и членов базового класса)
- ... Если классобъявленный как базовый класс для другого класса с использованием спецификатора закрытого доступа, публичные и защищенные члены базового класса доступны как закрытые члены производного класса.
В этом объявлении
a* p = new b();
при попытке доступа к закрытому подобъекту типа a
объекта типа b
, поскольку статический тип указателя p
равен a *
.
Фактически это утверждение
a* p = new b();
имеет ту же семантику, что и, например,
class A
{
private:
int x = 10;
};
A a;
int *p = &a.x;
Если это разрешено, то с помощью указателя вы можете изменить частный подобъект объекта.объект.