Как примечание: когда вы объявляете class
, область действия по умолчанию является закрытой (в отличие от struct
, где члены по умолчанию являются открытыми.)
Элемент переменной 'x' имеет значение толькодоступны для вашего класса и его друзей.Никто другой никогда не сможет получить доступ к 'x' напрямую (косвенно, если у вас есть функция, возвращающая ссылку на него, что является очень плохой идеей).
Текст, который вы цитировали, говорит о видимости для компилятора,так что X::x
существует, несмотря ни на что. не исчезнет только потому, что это личное.Видимость используется для поиска члена, на которого вы ссылаетесь, и возвращается первое соответствующее значение.В этот момент компилятор проверяет доступность, если она доступна, у вас все хорошо.Если нет, то это плохо сформирован .
Обратите внимание, что я упомянул друзей.Это ключевое слово делает доступными все переменные элементы.Когда компилятор работает с друзьями, он полностью игнорирует все защищенные и закрытые ключевые слова.
В большинстве случаев это очень простой процесс.Это идет в порядке.Точка.
Когда это становится более сложным, когда вы начинаете использовать виртуальные функции: они могут быть общедоступными, защищенными и частными, и это может измениться в зависимости от объявления класса ... (A происходит от B и делаетзащищенная виртуальная функция public; обычно это не очень хорошая идея, но C ++ не мешает вам делать это.) Конечно, это относится только к функциям, а не к переменным элементам, так что это другая тема.