Инкапсуляция C ++ (с примерами)

В этом руководстве мы узнаем об инкапсуляции в C ++ с помощью примеров.

Инкапсуляция - одна из ключевых особенностей объектно-ориентированного программирования. Он включает объединение элементов данных и функций в один класс.

Объединение похожих членов данных и функций внутри класса также помогает скрыть данные.

Инкапсуляция C ++

В общем, инкапсуляция - это процесс упаковки аналогичного кода в одном месте.

В C ++ мы можем объединять элементы данных и функции, которые работают вместе, внутри одного класса. Например,

 class Rectangle ( public: int length; int breadth; int getArea() ( return length * breadth; ) );

В приведенной выше программе функция getArea()вычисляет площадь прямоугольника. Чтобы рассчитать площадь, ей нужна длина и ширина.

Следовательно, элементы данных (длина и ширина) и функция getArea()хранятся вместе в Rectangleклассе.

Инкапсуляция в C ++

Пример 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;

Интересные статьи...