В этом руководстве мы узнаем об инкапсуляции в C ++ с помощью примеров.
Инкапсуляция - одна из ключевых особенностей объектно-ориентированного программирования. Он включает объединение элементов данных и функций в один класс.
Объединение похожих членов данных и функций внутри класса также помогает скрыть данные.
Инкапсуляция C ++
В общем, инкапсуляция - это процесс упаковки аналогичного кода в одном месте.
В C ++ мы можем объединять элементы данных и функции, которые работают вместе, внутри одного класса. Например,
class Rectangle ( public: int length; int breadth; int getArea() ( return length * breadth; ) );
В приведенной выше программе функция getArea()
вычисляет площадь прямоугольника. Чтобы рассчитать площадь, ей нужна длина и ширина.
Следовательно, элементы данных (длина и ширина) и функция getArea()
хранятся вместе в Rectangle
классе.

Пример 1: инкапсуляция C ++
// Program to calculate the area of a rectangle #include using namespace std; class Rectangle ( public: // Variables required for area calculation int length; int breadth; // Constructor to initialize variables Rectangle(int len, int brth) : length(len), breadth(brth) () // Function to calculate area int getArea() ( return length * breadth; ) ); int main() ( // Create object of Rectangle class Rectangle rect(8, 6); // Call getArea() function cout << "Area = " << rect.getArea(); return 0; )
Вывод
Площадь = 48
В приведенном выше примере мы вычисляем площадь прямоугольника.
Для вычисления площади, нам нужны две переменные: длина и ширина и функция: getArea()
. Следовательно, мы объединили эти переменные и функцию в один класс с именем Rectangle.
Здесь переменные и функции также могут быть доступны из других классов. Следовательно, это не сокрытие данных .
Это всего лишь инкапсуляция . Мы просто держим одинаковые коды вместе.
Примечание. Люди часто рассматривают инкапсуляцию как сокрытие данных, но это не совсем так.
Инкапсуляция относится к объединению связанных полей и методов вместе. Это можно использовать для сокрытия данных. Сама по себе инкапсуляция не является сокрытием данных.
Почему инкапсуляция?
- В C ++ инкапсуляция помогает нам хранить связанные данные и функции вместе, что делает наш код более чистым и легким для чтения.
- Это помогает контролировать изменение наших членов данных.
Рассмотрим ситуацию, когда мы хотим, чтобы поле длины в классе было неотрицательным. Здесь мы можем сделать переменную длины частной и применить логику внутри методаsetAge()
. Например,
class Rectangle ( private: int age; public: void setLength(int len) ( if (len>= 0) length = len; ) );
- Функции получения и установки обеспечивают доступ только для чтения или записи к членам нашего класса. Например,
getLength() // provides read-only access setLength() // provides write-only access
- Это помогает разделить компоненты системы. Например, мы можем инкапсулировать код в несколько пакетов.
Эти разделенные компоненты (пакеты) можно разрабатывать, тестировать и отлаживать независимо и одновременно. И любые изменения в конкретном компоненте не влияют на другие компоненты. - Мы также можем добиться сокрытия данных с помощью инкапсуляции. В примере 1 , если мы изменим переменные длины и ширины на
private
илиprotected
, то доступ к этим полям будет ограничен.
И они скрыты от внешних классов. Это называется сокрытием данных .
Скрытие данных
Скрытие данных - это способ ограничения доступа наших членов данных путем сокрытия деталей реализации. Инкапсуляция также позволяет скрыть данные.
Мы можем использовать модификаторы доступа, чтобы добиться сокрытия данных в C ++. Например,
Пример 2: Скрытие данных C ++ с использованием частного спецификатора
#include using namespace std; class Rectangle ( private: // Variables required for area calculation int length; int breadth; public: // Setter function for length void setLength(int len) ( length = len; ) // Setter function for breadth void setBreadth(int brth) ( breadth = brth; ) // Getter function for length int getLength() ( return length; ) // Getter function for breadth int getBreadth() ( return breadth; ) // Function to calculate area int getArea() ( return length * breadth; ) ); int main() ( // Create object of Rectangle class Rectangle rectangle1; // Initialize length using Setter function rectangle1.setLength(8); // Initialize breadth using Setter function rectangle1.setBreadth(6); // Access length using Getter function cout << "Length = " << rectangle1.getLength() << endl; // Access breadth using Getter function cout << "Breadth = " << rectangle1.getBreadth() << endl; // Call getArea() function cout << "Area = " << rectangle1.getArea(); return 0; )
Вывод
Длина = 8 Ширина = 6 Площадь = 48
Здесь мы сделали переменные длины и ширины private
.
Это означает, что к этим переменным нельзя получить прямой доступ вне Rectangle
класса.
Для того, чтобы получить доступ к этим закрытым переменным, мы использовали public
функции setLength()
, getLength()
, setBreadth()
и getBreadth()
. Они называются функциями получения и установки.
Сделав переменные приватными, мы смогли ограничить несанкционированный доступ извне. Это сокрытие данных .
Если мы попытаемся получить доступ к переменным из main()
класса, мы получим ошибку.
// error: rectangle1.length is inaccessible rectangle1.length = 8; // error: rectangle1.breadth is inaccessible rectangle1.length = 6;