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 Rectangle
třídě drženy pohromadě .

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ř metodysetAge()
. 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
private
neboprotected
, 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 Rectangle
třídu.
Pro přístup k těmto soukromým proměnné, které jsme použili public
funkce 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;