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 Rectangletriede spojené.
Zapuzdrenie v C ++
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
privatealeboprotected, 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 Rectangletriedy.
Pre prístup k týmto súkromným premenné, ktoré sme použili publicfunkcie 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;








