Модификаторы доступа public / private / protected применяются во время компиляции, а не во время выполнения.SEGFAULT - это ошибка времени выполнения, а не ошибка времени компиляции.Таким образом, в будущем, если вы получите SEGFAULT, вы можете быть уверены, что он не связан с уровнем доступа.Похоже, ваша путаница основана на том, применяются ли модификаторы доступа напрямую, косвенно, транзитивно и т. Д. Модификаторы доступа работают самым простым и понятным способом: они применяются только напрямую, к функциям или переменным, которые были объявленыв этом классе и контролировать доступ через данный класс к этим элементам.Если у вас есть доступ к такому элементу, дальнейший доступ определяется исключительно его собственными модификаторами доступа.
SEGFAULT обычно указывает на недопустимый доступ к памяти.Если вы испытываете SEGFAULTS, посмотрите, где вы разыменовываете указатели (когда у вас есть * X или X-> Y).Распространенные причины SEGFAULTS включают разыменование NULL, автономный доступ к массиву и использование объекта через указатель, когда рассматриваемый объект уже удален путем выхода из области видимости.