РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
677 of 815 menu

Ключевое слово protected

Ключевое слово protected используется в объявлении класса для указания уровня доступа к его членам: полям и методам. Члены, помеченные как protected, доступны внутри самого класса, а также внутри классов-наследников. Из внешнего кода (например, из функции main) к таким членам обратиться нельзя. Это делает protected удобным инструментом для реализации наследования, когда нужно скрыть детали реализации от посторонних, но оставить их доступными для потомков.

Синтаксис

class ClassName { protected: // поля и методы, доступные классу и наследникам };

Пример

Давайте создадим базовый класс Animal с защищенным полем name и защищенным методом getName. Затем создадим наследника Dog, который обращается к этому полю через унаследованный метод:

#include <iostream> #include <string> using namespace std; class Animal { protected: string name; string getName() { return name; } }; class Dog : public Animal { public: Dog(string n) { name = n; } void printName() { cout << getName() << endl; } }; int main() { Dog dog("Rex"); dog.printName(); return 0; }

Результат выполнения кода:

"Rex"

Пример

Попробуем обратиться к защищенному полю name напрямую из функции main. Такой код не скомпилируется, потому что protected запрещает доступ извне класса и его наследников:

#include <iostream> #include <string> using namespace std; class Animal { protected: string name; }; int main() { Animal animal; animal.name = "Rex"; // error: 'name' is protected return 0; }

Результат выполнения кода:

error: 'std::string Animal::name' is protected within this context

Пример

Покажем, что защищенный метод getName также недоступен из внешнего кода, даже если объект имеет тип наследника:

#include <iostream> #include <string> using namespace std; class Animal { protected: string getName() { return "abcde"; } }; class Dog : public Animal { }; int main() { Dog dog; cout << dog.getName() << endl; // error: 'getName' is protected return 0; }

Результат выполнения кода:

error: 'std::string Animal::getName()' is protected within this context

Смотрите также

  • ключевое слово public,
    которое открывает доступ к членам класса всем
  • ключевое слово private,
    которое закрывает доступ к членам класса от всех
  • ключевое слово friend,
    которое дает доступ к закрытым членам класса
  • механизм наследования,
    который тесно связан с уровнем доступа protected
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить