Права доступа

При необходимости в описании структуры можно использовать специальные ключевые слова — модификаторы доступа, которые ограничивают видимость полей извне структуры. Существует три модификатора: public, protected и private. По умолчанию все элементы структуры являются публичными, что эквивалентно следующей записи (на примере структуры Result):

struct Result
{
public:
   double probability;
   double coef[3];
   int direction;
   string status;
   ...
};

Все члены ниже модификатора, пока не встретится другой модификатор или не закончится блок структуры, получают соответствующие права доступа. Секций с разными правами может быть много, они могу чередоваться произвольным образом.

Защищенные с помощью protected члены станут доступны только из кода данной структуры и структур-наследников, то есть подразумевается, что в них должны быть публичные методы, иначе обратиться к таким полям никто не сможет.

Закрытые с помощью private члены доступны только из кода данной структуры. Например, если добавить private перед полем status, то, скорее всего, потребуется метод для чтения статуса внешним кодом (getStatus).

struct Result
{
public:
   double probability;
   double coef[3];
   int direction;
   
private:
   string status;
   
public:
   string getStatus()
   {
      return status;
   }
   ...
};

Установить статус можно будет только через параметр второго конструктора. Прямое обращение к полю приведет к ошибке "нет доступа к закрытому члену 'status' структуры 'Result'":

// error:
// cannot access to private member 'status' declared in struct 'Result'
r.status = "message";

В классах доступом по умолчанию является private. Это отвечает принципу инкапсуляции, который мы рассмотрим в Главе про классы.