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

В този урок ще научим за капсулирането в C ++ с помощта на примери.

Капсулирането е една от ключовите характеристики на обектно-ориентираното програмиране. Той включва групиране на членове на данни и функции в рамките на един клас.

Обединяването на подобни членове на данни и функции в клас заедно също помага при скриването на данни.

C ++ капсулиране

Като цяло капсулирането е процес на опаковане на подобен код на едно място.

В C ++ можем да обединим членове на данни и функции, които работят заедно в един клас. Например,

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

В горната програма функцията getArea()изчислява площта на правоъгълник. За да се изчисли площта, тя се нуждае от дължина и ширина.

Следователно членовете на данните (дължина и ширина) и функцията getArea()се съхраняват заедно в Rectangleкласа.

Капсулиране в C ++

Пример 1: С ++ капсулиране

 // 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; ) );
    • Функциите getter и setter осигуряват достъп само за четене или само за запис на членовете на нашия клас. Например,
       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(). Те се наричат ​​getter и setter функции.

    Предоставянето на променливите частни ни позволи да ограничим неоторизиран достъп извън класа. Това е скриване на данни .

    Ако се опитаме да получим достъп до променливите от main()класа, ще получим грешка.

     // error: rectangle1.length is inaccessible rectangle1.length = 8; // error: rectangle1.breadth is inaccessible rectangle1.length = 6;

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