Спецификаторы доступа C++
Спецификаторы доступа
К настоящему времени вы хорошо знакомы с public
ключевым словом, которое встречается во всех наших примерах классов:
Пример
class MyClass { // The class
public: // Access specifier
// class members goes here
};
Ключевое public
слово является спецификатором доступа.
Спецификаторы доступа определяют, как можно получить доступ к членам (атрибутам и методам) класса. В приведенном выше примере члены public
- это означает, что к ним можно получить доступ и изменить их вне кода.
Однако что, если мы хотим, чтобы участники были закрытыми и скрытыми от внешнего мира?
В C++ есть три спецификатора доступа:
public
- члены доступны извне классаprivate
- члены не могут быть доступны (или просмотрены) вне классаprotected
- члены не могут быть доступны извне класса, однако они могут быть доступны в унаследованных классах. Вы узнаете больше о наследовании позже.
В следующем примере мы демонстрируем различия между членами public
и :private
Пример
class
MyClass {
public: // Public access
specifier
int x; // Public attribute
private: // Private access specifier
int y; // Private attribute
};
int main() {
MyClass
myObj;
myObj.x = 25; // Allowed (public)
myObj.y = 50; //
Not allowed (private)
return 0;
}
Если вы попытаетесь получить доступ к закрытому члену, произойдет ошибка:
error: y is private
Примечание. Можно получить доступ к закрытым членам класса, используя общедоступный метод внутри того же класса. См. следующую главу ( Инкапсуляция ) о том, как это сделать.
Совет: считается хорошей практикой объявлять атрибуты вашего класса закрытыми (как можно чаще). Это уменьшит вероятность того, что вы (или другие) испортите код. Это также основной компонент концепции инкапсуляции , о которой вы узнаете больше в следующей главе.
Примечание. По умолчанию все члены класса, private
если вы не укажете спецификатор доступа:
Пример
class
MyClass {
int x; // Private attribute
int y; // Private attribute
};