V tomto tutoriále sa pomocou príkladov dozvieme o zapuzdrení v C ++.
Zapuzdrenie je jednou z kľúčových vlastností objektovo orientovaného programovania. Zahŕňa to združovanie dátových členov a funkcií do jednej triedy.
Spojenie podobných dátových členov a funkcií vo vnútri triedy tiež pomáha pri skrývaní údajov.
Zapuzdrenie v C ++
Zapuzdrenie je vo všeobecnosti proces zabalenia podobného kódu na jedno miesto.
V C ++ môžeme spojiť dátové členy a funkcie, ktoré fungujú spoločne v jednej triede. Napríklad,
class Rectangle ( public: int length; int breadth; int getArea() ( return length * breadth; ) );
Vo vyššie uvedenom programe funkcia getArea()
počíta plochu obdĺžnika. Na výpočet plochy je potrebná dĺžka a šírka.
Preto sú dátové členy (dĺžka a šírka) a funkcia getArea()
v Rectangle
triede spojené.

Príklad 1: Zapuzdrenie 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ýkon
Plocha = 48
Vo vyššie uvedenom príklade počítame plochu obdĺžnika.
Pre výpočet plochy, potrebujeme dve premenné: krížom krážom a funkcie: getArea()
. Preto sme tieto premenné spojili do jednej triedy s názvom Obdĺžnik.
Tu sú k premenným a funkciám prístupné aj z iných tried. Nejde teda o skrývanie údajov .
Toto je iba zapuzdrenie . Podobné kódy len držíme pohromade.
Poznámka: Ľudia často považujú zapuzdrenie za skrytie údajov, ale nie je to tak úplne pravda.
Zapuzdrenie znamená spojenie podobných polí a metód dohromady. To možno použiť na dosiahnutie skrytia údajov. Samotné zapuzdrenie neskrýva údaje.
Prečo zapuzdrenie?
- V C ++ nám zapuzdrenie pomáha udržiavať súvisiace údaje a funkcie pohromade, čo robí náš kód čistejším a ľahšie čitateľným.
- Pomáha kontrolovať zmeny našich dátových členov.
Zvážte situáciu, keď chceme, aby pole dĺžky v triede nebolo záporné. Tu môžeme premennú dĺžky urobiť súkromnou a použiť logiku vo vnútri metódysetAge()
. Napríklad,
class Rectangle ( private: int age; public: void setLength(int len) ( if (len>= 0) length = len; ) );
- Funkcie getter a setter poskytujú členom našej triedy prístup iba na čítanie alebo iba na zápis . Napríklad,
getLength() // provides read-only access setLength() // provides write-only access
- Pomáha oddeliť komponenty systému. Napríklad môžeme kód zapuzdriť do viacerých zväzkov.
Tieto oddelené komponenty (zväzky) je možné vyvíjať, testovať a ladiť nezávisle a súčasne. A akékoľvek zmeny v konkrétnom komponente nemajú žiadny vplyv na ostatné komponenty. - Skrývanie údajov môžeme dosiahnuť aj pomocou zapuzdrenia. Ak v príklade 1 zmeníme premenné dĺžky a šírky na
private
aleboprotected
, potom je prístup k týmto poliam obmedzený.
A sú skryté pred vonkajšími triedami. Toto sa nazýva skrývanie údajov .
Skrývanie údajov
Skrývanie údajov je spôsob obmedzovania prístupu našich dátových členov skrytím podrobností implementácie. Zapuzdrenie tiež poskytuje spôsob skrývania údajov.
Na dosiahnutie skrytia dát v C ++ môžeme použiť modifikátory prístupu. Napríklad,
Príklad 2: Skrývanie údajov C ++ pomocou súkromného špecifikátora
#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ýkon
Dĺžka = 8 Šírka = 6 Plocha = 48
Tu sme vytvorili premenné dĺžky a šírky private
.
To znamená, že k týmto premenným nie je možné priamo získať prístup mimo Rectangle
triedy.
Pre prístup k týmto súkromným premenné, ktoré sme použili public
funkcie setLength()
, getLength()
, setBreadth()
a getBreadth()
. Nazývajú sa funkcie getra a setra.
Nastavením súkromných premenných sme mohli obmedziť neoprávnený prístup mimo triedy. Toto je skrývanie údajov .
Ak sa pokúsime získať prístup k premenným z main()
triedy, zobrazí sa chyba.
// error: rectangle1.length is inaccessible rectangle1.length = 8; // error: rectangle1.breadth is inaccessible rectangle1.length = 6;