Selles õpetuses õpime näidete abil C ++ -sse kapseldamist.
Kapseldamine on objektorienteeritud programmeerimise üks põhijooni. See hõlmab andmeliikmete ja funktsioonide komplekteerimist ühe klassi sees.
Sarnaste andmeliikmete ja klassi sees olevate funktsioonide kokku sidumine aitab ka andmete varjamist.
C ++ kapseldamine
Üldiselt on kapseldamine sarnase koodi ühte kohta pakkimise protsess.
C ++ versioonis saame koondada andmeliikmeid ja funktsioone, mis toimivad koos ühe klassi sees. Näiteks,
class Rectangle ( public: int length; int breadth; int getArea() ( return length * breadth; ) );
Ülaltoodud programmis getArea()
arvutab funktsioon ristküliku pindala. Pindala arvutamiseks on vaja pikkust ja laiust.
Seega getArea()
hoitakse Rectangle
klassis koos andmeliikmeid (pikkus ja laius) ning funktsiooni .

Näide 1: C ++ kapseldamine
// 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äljund
Pindala = 48
Ülaltoodud näites arvutame ristküliku pindala.
Arvutada pindala, peame kahe muutuja pikkus ja laius ja funktsioon: getArea()
. Seega koondasime need muutujad ja toimisime ühe ristkülikuklassi sees.
Siin saab muutujatele ja funktsioonidele juurde pääseda ka teistest klassidest. Seega pole see andmete varjamine .
See on ainult kapseldamine . Hoiame lihtsalt sarnaseid koode koos.
Märkus. Inimesed peavad kapseldamist sageli andmete varjamiseks, kuid see pole päris tõsi.
Kapseldamine viitab seotud väljade ja meetodite ühendamisele. Seda saab kasutada andmete peitmiseks. Kapseldamine iseenesest ei ole andmete varjamine.
Miks kapseldamine?
- C ++ puhul aitab kapseldamine hoida seotud andmeid ja funktsioone koos, mis muudab meie koodi puhtamaks ja hõlpsasti loetavaks.
- See aitab kontrollida meie andmeliikmete muutmist.
Mõelgem olukorrale, kus me tahame, et klassi pikkusväli ei oleks negatiivne. Siin saame muuta pikkuse muutuja privaatseks ja rakendada meetodi sees olevat loogikatsetAge()
. Näiteks,
class Rectangle ( private: int age; public: void setLength(int len) ( if (len>= 0) length = len; ) );
- Funktsioonid getter ja setter pakuvad meie klassi liikmetele ainult kirjutus- või kirjutusjuurdepääsu . Näiteks,
getLength() // provides read-only access setLength() // provides write-only access
- See aitab süsteemi komponente lahutada. Näiteks võime koodi kapseldada mitmesse kimpu.
Neid lahutatud komponente (kimbud) saab iseseisvalt ja samaaegselt arendada, testida ja siluda. Ja mis tahes muudatused konkreetses komponendis ei mõjuta teisi komponente. - Andmete varjamine on võimalik ka kapseldamise abil. Kui näites 1 muudame pikkuse ja laiuse muutujad väärtuseks
private
võiprotected
, on juurdepääs nendele väljadele piiratud.
Ja neid hoitakse välisklasside eest varjatud. Seda nimetatakse andmete varjamiseks .
Andmete varjamine
Andmete varjamine on viis, kuidas piirata meie andmeliikmete juurdepääsu, varjates rakenduse üksikasju. Kapseldamine annab ka võimaluse andmete peitmiseks.
Andmete varjamise saavutamiseks C ++ keeles saame kasutada juurdepääsu modifikaatoreid. Näiteks,
Näide 2: C ++ andmete peitmine privaatse täpsustaja abil
#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äljund
Pikkus = 8 laius = 6 pindala = 48
Siin oleme teinud pikkuse ja laiuse muutujad private
.
See tähendab, et nendele muutujatele pole väljaspool Rectangle
klassi otsest juurdepääsu .
Et pääseda nende era- muutujad, oleme kasutanud public
funktsioone setLength()
, getLength()
, setBreadth()
, ja getBreadth()
. Neid nimetatakse getter- ja setter-funktsioonideks.
Muutujate privaatseks muutmine võimaldas meil piirata loata juurdepääsu väljastpoolt klassi. See on andmete varjamine .
Kui proovime muutujate juurde pääseda main()
klassist, saame vea.
// error: rectangle1.length is inaccessible rectangle1.length = 8; // error: rectangle1.breadth is inaccessible rectangle1.length = 6;