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