Я думаю, что для начала существует проблема со словарем.
В C ++ (и большинстве языков) class
- это type
. Вы можете думать об этом как о проекте по созданию чего-то.
- описывает атрибуты, которые содержатся
- описывает методы работы с этими атрибутами
- описывает ограничения, которые применяются: это «доступность»
object
создается путем создания экземпляра класса, т. Е. Построения того, что описано в проекте. Это более или менее набор атрибутов. У вас может быть несколько объектов одного класса, как у вас может быть несколько домов одного и того же плана: обратите внимание, что их физическое местоположение отличается по очевидным причинам:)
Теперь перейдем к доступности. Существует 3 типичных уровня доступности: public
, protected
и private
.
public
, как и ожидалось, означает, что каждому предоставлен доступ к атрибутам или методам
protected
несколько менее тривиально. Это означает, что только объект или его дочерние элементы могут получить доступ к атрибутам (плохая идея *) или методам. (Плюс в C ++ friend
с)
private
означает, что только объекты этого класса (а не их дочерние элементы) могут иметь доступ к атрибутам или методам (плюс, в C ++, friend
s)
Примечание: независимо от уровня доступности, объект имеет неограниченный доступ ко всем атрибутам и методам любого объекта того же класса.
(*) Несмотря на то, что он появляется время от времени, использование атрибутов protected
обычно не рекомендуется. Смысл инкапсуляции в том, чтобы скрыть детали не только ради этого, но и потому, что, точно контролируя, кто может получить доступ к данным, мы можем гарантировать, что класс поддерживает свои инварианты (простой пример, массив где вы будете хранить размер отдельно, вы должны убедиться, что «размер» действительно всегда представляет количество элементов в массиве). Примечание: это ограничение не применяется, когда вы можете запечатать иерархию, как, например, в C #.