private public protected

public , private, protected встречаются во-первых при определении членов класса (переменные, методы,..), во-вторых при указании типа наследования в дочернем классе.

Что касается первого варианта использования смотрим на картинку ниже:

фотка 1

Тут под колонкой class понимаем текущий класс.

Колонка subclasses подразумевает дочерний класс, наследуемый от класса class.

Ну и World (очень поавильное название) колонка подразумевает доступность к членам класса извне .

Все выше справедливо (конкретно для колонки subclasses) при наследовании класса с типом public. То есть :

class cl2: public cl1{...}

Если при наследовании указать private или protected, то картина меняется :

фотка 2

Но изменения касаются только к ограничениям доступности членов базового класса, то есть от которого наследуемся.

Для членов наследуемого класса ничего не меняется.

Примечательно , что спецификатор protected заставляет вас унаследоваться от класса, в котором этот protected член определен и к которому вы хотели бы получить доступ извне.