Zapouzdření v C ++ (s příklady)

V tomto tutoriálu se pomocí příkladů dozvíme o zapouzdření v C ++.

Zapouzdření je jednou z klíčových vlastností objektově orientovaného programování. Zahrnuje sdružování datových členů a funkcí uvnitř jedné třídy.

Spojování podobných datových členů a funkcí uvnitř třídy také pomáhá při skrývání dat.

Zapouzdření v C ++

Obecně je zapouzdření proces zabalení podobného kódu na jedno místo.

V C ++ můžeme spojit datové členy a funkce, které fungují společně uvnitř jedné třídy. Například,

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

Ve výše uvedeném programu funkce getArea()vypočítá plochu obdélníku. K výpočtu plochy potřebuje délku a šířku.

Proto jsou datové členy (délka a šířka) a funkce getArea()ve Rectangletřídě drženy pohromadě .

Zapouzdření v C ++

Příklad 1: Zapouzdření v 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; )

Výstup

 Plocha = 48

Ve výše uvedeném příkladu počítáme plochu obdélníku.

Pro výpočet plochy, potřebujeme dvě proměnné: křížem krážem a funkce: getArea(). Proto jsme tyto proměnné spojili a fungovali uvnitř jedné třídy s názvem Obdélník.

Zde lze k proměnným a funkcím přistupovat také z jiných tříd. Nejedná se tedy o skrytí dat .

Toto je pouze zapouzdření . Jen udržujeme podobné kódy pohromadě.

Poznámka: Lidé často považují zapouzdření za skrytí dat, ale není to tak úplně pravda.

Zapouzdření odkazuje na sdružování souvisejících polí a metod dohromady. To lze použít k dosažení skrytí dat. Zapouzdření samo o sobě není skrývání dat.

Proč zapouzdření?

  • V C ++ nám zapouzdření pomáhá udržovat související data a funkce pohromadě, díky čemuž je náš kód čistší a snadno čitelný.
    • Pomáhá kontrolovat modifikaci našich datových členů.
      Zvažte situaci, kdy chceme, aby pole délky ve třídě bylo nezáporné. Zde můžeme učinit proměnnou délky soukromou a použít logiku uvnitř metody setAge(). Například,
       class Rectangle ( private: int age; public: void setLength(int len) ( if (len>= 0) length = len; ) );
    • Funkce getter a setter poskytují členům naší třídy přístup jen pro čtení nebo pro zápis . Například,
       getLength() // provides read-only access setLength() // provides write-only access
    • Pomáhá oddělit součásti systému. Například můžeme zapouzdřit kód do více svazků.
      Tyto oddělené komponenty (svazky) lze vyvíjet, testovat a ladit nezávisle a souběžně. A jakékoli změny v konkrétní komponentě nemají žádný vliv na ostatní komponenty.
    • Skrývání dat můžeme dosáhnout také pomocí zapouzdření. Pokud v příkladu 1 změníme proměnné délky a šířky na privatenebo protected, pak je přístup k těmto polím omezen.
      A jsou skrytí před vnějšími třídami. Tomu se říká skrývání dat .

    Skrývání dat

    Skrývání dat je způsob, jak omezit přístup našich datových členů skrytím podrobností implementace. Zapouzdření také poskytuje způsob, jak skrýt data.

    K dosažení skrytí dat v C ++ můžeme použít modifikátory přístupu. Například,

    Příklad 2: Skrytí dat C ++ pomocí soukromého specifikátoru

     #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; )

    Výstup

     Délka = 8 Šířka = 6 Plocha = 48

    Zde jsme vytvořili proměnné délky a šířky private.

    To znamená, že k těmto proměnným nelze přímo přistupovat mimo Rectangletřídu.

    Pro přístup k těmto soukromým proměnné, které jsme použili publicfunkce setLength(), getLength(), setBreadth()a getBreadth(). Tyto funkce se nazývají getr a setter.

    Díky tomu, že jsme proměnné nastavili jako soukromé, jsme mohli omezit neoprávněný přístup zvenčí třídy. Toto je skrývání dat .

    Pokud se pokusíme získat přístup k proměnným ze main()třídy, zobrazí se chyba.

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

Zajímavé články...