Есть ли какая-либо конкретная причина, что все элементы данных в классе являются частными по умолчанию в C++?
Потому что лучше быть правильно инкапсулированным и открывать только то, что необходимо, в отличие от того, чтобы все было открыто по умолчанию и закрывать его.
Инкапсуляция (сокрытие информации) - это хорошо , и, как и в случае с безопасностью (например, блокировка сетевых служб), значение по умолчанию должно быть скорее хорошим, чем плохим.
Причина в том, что открытые части класса должны быть явно опубликованы.
В этом (во всяком случае для меня) интересно то, что первая строка после открывающей скобки многих, многих определений классов является общедоступной:
. Большинство читателей класса интересуются общедоступными битами, поскольку это то, с чем они взаимодействуют, и поэтому многие определения классов в любом случае сначала имеют свои публичные биты.
Спецификаторы доступа C ++ применяются к диапазону, который следует за ними - я думаю, что метод Java и C #, когда каждый член указывает видимость члена (с разумным значением по умолчанию), является предпочтительным.
Одним словом, инкапсуляция. Цель состоит в том, чтобы частные детали реализации (такие как элементы данных) были частными. Только явно публичный API доступен для клиентов класса.
2.10 Модель защиты
Перед тем, как начать работу над C с классами, я работал с операционными системами . Идеи защиты компьютера Cambridge CAP и подобных систем - а не любая работа в языках программирования - вдохновили механизмы защиты C ++. Класс является единицей защиты, и фундаментальное правило состоит в том, что вы не можете предоставить себе доступ к классу; только объявления, помещенные в объявление класса (предположительно его владельцем) , могут предоставить доступ. По умолчанию вся информация является частной.
Потому что в противном случае не было бы никакой разницы между классом
и struct
?