Модификаторы доступа

Рассматривая тему конструктора я уже привел пример с модифкатором досутупа private, но мы не разбирали детально.Модификаторы доступа позволяют ограничивать доступ к методам и полям класса. В C++ существует 3 основных модификатора доступа, но сейчас я перечислю только 2 (с третьим познакомимся чуть позже):

  • private - все объекты следующие за этой меткой являются закрытми, то есть доступные только внутри класса. Доступ извне запрещен.
  • public - все объекты следующие за этой меткой являются открытыми, фактически представляют интерфейс класса.

При этом маркеры можно чередовать. Важно лишь, что все объекты за ним наследуют уровень доступа. Следующий пример демонстриует эту возможность:

struct Alpha {
// по умолчанию для struct модификатор открытый, то есть неявно действует модификатор public, если не указан явно private
    Alpha(int n): _n(n) { }

// следующие элементы закрытые
private:
    int _n;

// следующие элементы откртые
public:
    int getN() { return _n; }
};

// ...

Alpha a(5);
cout << a.getN();
cout << a._n; // ошибка

Класс

В C++ ключевое слово struct можно заменить на class, тогда все поля и методы по умолчанию будут private.

class Alpha {
// по умолчанию для class модификатор закрытый, то есть неявно действует модификатор private, если не указан явно public
    int _n;

// следующие элементы откртые
public:
    Alpha(int n): _n(n) { }
    int getN() { return _n; }
};

// ...

Alpha a(5);
cout << a.getN();
cout << a._n; // ошибка

То есть, фактически, в C++ разгницы в использовании между struct и class никакой кроме уровня доступа по умолчанию - в struct - по умолчанию все открыто, в class - все закрыто.