Инкапсуляция данных в C++
Все программы C++ состоят из следующих двух основных элементов —
-
Операторы программы (код) − Это часть программы, которая выполняет действия, и они называются функциями.
-
Данные программы − Данные — это информация о программе, на которую влияют программные функции.
Инкапсуляция — это концепция объектно-ориентированного программирования, которая связывает вместе данные и функции, которые манипулируют данными, и защищает их от внешнего вмешательства и неправильного использования. Инкапсуляция данных привела к важной ООП-концепции сокрытия данных. .
Инкапсуляция данных представляет собой механизм объединения данных и функций, которые их используют, и абстракции данных — это механизм предоставления доступа только к интерфейсам и сокрытия деталей реализации от пользователя.
C++ поддерживает свойства инкапсуляции и сокрытия данных за счет создания определяемых пользователем типов, называемых классами. . Мы уже изучили, что класс может содержать частные, защищенные и общедоступно члены. По умолчанию все элементы, определенные в классе, являются частными. Например —
class Box { public: double getVolume(void) { return length * breadth * height; } private: double length; // Length of a box double breadth; // Breadth of a box double height; // Height of a box };
Переменные длина, ширина и высота являются личными. . Это означает, что они могут быть доступны только другим членам класса Box, а не какой-либо другой части вашей программы. Это один из способов достижения инкапсуляции.
Чтобы сделать части класса общедоступными (т. е. доступными для других частей вашей программы), вы должны объявить их после public ключевое слово. Все переменные или функции, определенные после спецификатора public, доступны для всех других функций вашей программы.
Создание одного класса другом другого раскрывает детали реализации и уменьшает инкапсуляцию. В идеале следует скрыть как можно больше деталей каждого класса от всех других классов.
Пример инкапсуляции данных
Любая программа на C++, в которой вы реализуете класс с открытыми и закрытыми членами, является примером инкапсуляции и абстракции данных. Рассмотрим следующий пример —
Живая демонстрация#include <iostream> using namespace std; class Adder { public: // constructor Adder(int i = 0) { total = i; } // interface to outside world void addNum(int number) { total += number; } // interface to outside world int getTotal() { return total; }; private: // hidden data from outside world int total; }; int main() { Adder a; a.addNum(10); a.addNum(20); a.addNum(30); cout << "Total " << a.getTotal() <<endl; return 0; }
Когда приведенный выше код скомпилирован и выполнен, он дает следующий результат —
Total 60
Вышеупомянутый класс складывает числа вместе и возвращает сумму. Публичные члены addNum и получитьИтого являются интерфейсами к внешнему миру, и пользователю необходимо знать их, чтобы использовать класс. Частный член всего это то, что скрыто от внешнего мира, но необходимо для правильной работы класса.
Разработка стратегии
Большинство из нас научились делать членов класса закрытыми по умолчанию, если нам действительно не нужно раскрывать их. Это просто хорошая инкапсуляция .
Чаще всего это применяется к членам данных, но в равной степени относится ко всем членам, включая виртуальные функции.
Язык C