У цьому підручнику ми дізнаємося про інкапсуляцію в 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;