Класс содержит данные и методы (функции). Для использования класса программы просто должны знать информацию, которую хранит класс (его элементы данных) и методы, которые манипулируют данными (функции). Программам не требуется знать, как работают методы. Программы должны знать только - какую задачу выполняют методы. Программа рассматривает класс как "черный ящик". Программа знает, какие методы необходимо вызвать и какие параметры им передать, но программа ничего не знает о реальной работе, выполняющейся внутри класса (в "черном ящике").
Сокрытие информации представляет собой процесс, в результате которого программе предоставляется только минимальная информация, необходимая для использования класса. Частные и общие элементы класса помогают получить информацию, скрытую внутри программы. Созданные классы использовали метку public для объявления всех элементов класса общими, т.е. видимыми для всей программы. Программа могла непосредственно обратиться к любому элементу класса, используя оператор точку:
| class employee |
| { |
| public: |
| char name [64]; |
| long employee_id; |
| float salary; |
| void show_employee(void); |
| } |
При создании класса можно иметь элементы, чьи значения используются только внутри класса, но обращаться к которым самой программе нет необходимости. Такие элементы являются частными (private), и их следует скрывать от программы. Если не используется метка public, то по умолчанию C++ подразумевает, что все элементы класса являются частными. Программы не могут обращаться к частным элементам класса, используя оператор точку. К частным элементам класса могут обращаться только элементы самого класса. При создании класса следует разделить элементы на частные и общие:
| class some_class |
| { |
| public: |
| int some_variable; |
| void initialize_private(int, float); // Общие элементы |
| void show_data(void); |
| private: |
| int key_value; // Частные элементы |
| float key_number; |
| } |
Метки public и private позволяют определять частные и общие элементы. Программа может использовать оператор точку для обращения к общим элементам:
| object.some_variable = 1001; |
| object.initialize_private(2002, 1.2345); |
| object.show_data() |
Если ваша программа пытается обратиться к частным элементам key_value или key_number, используя точку, компилятор сообщает о синтаксических ошибках.
Необходимо защищать элементы класса от прямого доступа к ним делая их частными. При этом программы не могут непосредственно присваивать значения таким элементам, используя оператор точку. Вместо того чтобы присвоить значение, программа должна вызвать метод класса. Предотвращая прямой доступ к элементам данных, можно гарантировать, что им всегда будут присваиваться допустимые значения. Например, предположим что объект nuclear_reactor вашей программы использует переменную с именем melt_down, которая всегда должна содержать значение в диапазоне от 1 до 5. Если элемент melt_down является общим, программа может непосредственно обратиться к элементу, изменяя его значение произвольным образом:
nuclear_reactor.melt_down = 101
Если вместо этого сделать переменную частной, то можно использовать метод класса, например assign_meltdown, чтобы присвоить значение этой переменной. Функция assign_meltdown может проверять присваиваемое значение, чтобы убедиться, что оно является допустимым:
| int nuke::assign_meltdown(int value) |
| { |
| if ((value > 0) && (value <= 5)) |
| { |
| melt_down = value; |
| return(0); // Успешное присваивание |
| } else return(-1); // Недопустимое значение |
| } |
Методы класса, которые управляют доступом к элементам данных, представляют собой интерфейсные функции. При создании классов вы будете использовать интерфейсные функции для защиты данных своих классов.
2.5. Использование общих и частных элементов класса.
Следующая программа иллюстрирует использование общих и частных элементов класса. Программа определяет объект типа employee:
| class employee |
| { |
| public: |
| int assign_values(char *, long, float); |
| void show_employee(void); |
| int change_salary(float); |
| long get_id(void); |
| private: |
| char name [64]; |
| long employee_id; |
| float salary; |
| } |
Класс защищает все свои элементы данных, объявляя их частными. Для доступа к элементам данных программа должна использовать интерфейсные функции. Реализация программы:






