В этом руководстве мы узнаем о модификаторах доступа для классов C ++ с помощью примеров. Модификаторы доступа C ++ бывают общедоступными, частными и защищенными.
Одной из основных функций объектно-ориентированных языков программирования, таких как C ++, является скрытие данных .
Скрытие данных относится к ограничению доступа к элементам данных класса. Это сделано для предотвращения изменения данных класса другими функциями и классами.
Однако также важно сделать некоторые функции-члены и данные-члены доступными, чтобы скрытыми данными можно было управлять косвенно.
Модификаторы доступа C ++ позволяют нам определять, какие члены класса доступны для других классов и функций, а какие нет.
Например,
class Patient ( private: int patientNumber; string diagnosis; public: void billing() ( // code ) void makeAppointment() ( // code ) );
Здесь переменные пациентаNumber и диагноз Patient
класса скрыты с помощью private
ключевого слова, а функции-члены доступны с помощью public
ключевого слова.
Типы модификаторов доступа C ++
В C ++ есть 3 модификатора доступа:
public
private
protected
модификатор публичного доступа
public
Ключевое слово используется для создания открытых членов (данные и функции).- Публичные участники доступны из любой части программы.
Пример 1: модификатор общего доступа C ++
#include using namespace std; // define a class class Sample ( // public elements public: int age; void displayAge() ( cout << "Age = " << age << endl; ) ); int main() ( // declare a class object Sample obj1; cout <> obj1.age; // call class function obj1.displayAge(); return 0; )
Вывод:
Введите свой возраст: 20 Возраст = 20
В этой программе мы создали класс с именем Sample
, который содержит public
переменную age и public
функцию displayAge()
.
В main()
, мы создали объект Sample
класса с именем obj1. Затем мы получаем доступ к публичным элементам напрямую с помощью кодов obj.age
и obj.displayAge()
.
модификатор частного доступа
private
Ключевое слово используется для создания частных пользователей (данные и функции).- Доступ к закрытым членам можно получить только из класса.
- Однако классы друзей и функции друзей могут иметь доступ к закрытым членам.
Пример 2: Спецификатор частного доступа C ++
#include using namespace std; // define a class class Sample ( // private elements private: int age; // public elements public: void displayAge(int a) ( age = a; cout << "Age = " << age << endl; ) ); int main() ( int ageInput; // declare an object Sample obj1; cout <> ageInput; // call function and pass ageInput as argument obj1.displayAge(ageInput); return 0; )
Вывод:
Введите свой возраст: 20 Возраст = 20
В main()
объект obj1 не может напрямую получить доступ к переменной класса age.
// error cin>> obj1.age;
Мы можем только косвенно управлять возрастом через общедоступную функцию displayAge()
, поскольку эта функция присваивает возраст переданному в нее аргументу, то есть параметру функции int a
.
защищенный модификатор доступа
Прежде чем мы узнаем о protected
спецификаторе доступа, убедитесь, что вы знаете о наследовании в C ++.
protected
Ключевое слово используется для создания защищенных членов (данные и функции).- Доступ к защищенным членам можно получить как внутри класса, так и из производного класса.
Пример 3: Спецификатор доступа, защищенный C ++
#include using namespace std; // declare parent class class Sample ( // protected elements protected: int age; ); // declare child class class SampleChild : public Sample ( public: void displayAge(int a) ( age = a; cout << "Age = " << age << endl; ) ); int main() ( int ageInput; // declare object of child class SampleChild child; cout <> ageInput; // call child class function // pass ageInput as argument child.displayAge(ageInput); return 0; )
Вывод:
Введите свой возраст: 20 Возраст = 20
Здесь ChildSample
унаследованный класс, производный от Sample
. Возраст переменной объявляется Sample
с protected
ключевым словом.
Это означает, что ChildSample
может получить доступ к возрасту, поскольку Sample
это его родительский класс.
Мы видим это, поскольку присвоили значение age, ChildSample
даже если age объявлен в Sample
классе.
Резюме: общедоступное, частное и защищенное
public
к элементам могут получить доступ все остальные классы и функции.private
к элементам нельзя получить доступ за пределами класса, в котором они объявлены, за исключениемfriend
классов и функций.protected
элементы такие же, какprivate
, за исключением того, что к ним могут обращаться производные классы.
Спецификаторы | Тот же класс | Производный класс | Вне класса |
---|---|---|---|
public | да | да | да |
private | да | Нет | Нет |
protected | да | да | Нет |
Примечание. По умолчанию членами класса в C ++ являются private
, если не указано иное.