Концепция объектно-ориентированного программирования основана на понятиях объекта и класса. Каждый объект характеризуется присущими ему свойствами, методами (действиями, совершаемыми над ним) и событиями, на которые объект реагирует определенным образом - выполняет заданные действия. В языке С++ объекты - это переменные класса или структуры или, как принято говорить, конкрегные экземпляры класса или структуры. Классы и структуры определяют типы (категории) объектов, которые содержат как объявление данных , так и функции (методы) их обработки. Данные, объявленныеи в классе часто называют членами-данными, функции - членами функциями класса.
Пользователю, как правило, предоставляется описание класса - набор свойств, методов, событий, а не его реализация. Главная забота класса - скрыть как можно больше информации от пользователя, которая ему непосредственно не нужна. Это свойство, обычно называемое инкапсуляцией, накладывает ограничения на использование свойств и методов класса.
10.1 Управление доступом классу
Существует три категории пользователей класса:
- сам класс (члены-функции класса могут обращаться к другим членам-функциям или членам-данным);
- обычные пользователи, точнее программы пользователя;
- производные классы, точнее члены-функции производного класса, которые могут обращаться к членам-функциям или членам-данным базового(родительского) класса.
Каждый пользователь обладает разными привилегиями доступа. Каждый уровень доступа ассоциируется с определенным ключевым словом, а именно: private, public, protected.
Приватные члены класса, объявленные в секции private имеют наиболее ограниченную область действия. Обратите внимание, что приватные данные видимы, но недоступны в программе пользователя. Такой контроль введен для предотвращения нечаянного доступа к данным или внутренним функциям, в целях уменьшения ошибок при разработке программ, но не для предотвращения “взлома”.
Ко всему, что объявлено в секции public, разрешен неограниченный доступ. В частности, можно все содержимое класса объявить общедоступным и манипулировать им, как заблагорассудится.
При определении класса некоторые члены-данные и члены-функции можно скрыть от пользователя, но сделать доступными для производных классов, поместив эти члены и функции в protected-секцию.
По умолчанию секция класса (без явного указания спецификации public, private, protected) является private-секцией, а в структуре - public-секцией. В этом заключается основное различие структур и классов.