Tässä opetusohjelmassa opitaan kapseloinnista C ++: iin esimerkkien avulla.
Kapselointi on yksi olio-ohjelmoinnin pääpiirteistä. Siihen sisältyy tietojäsenten ja toimintojen niputtaminen yhteen luokkaan.
Samankaltaisten tietojen jäsenten ja toimintojen niputtaminen luokan sisällä auttaa myös tietojen piilottamisessa.
C ++ kapselointi
Yleensä kapselointi on prosessi, jolla samanlainen koodi kääritään yhteen paikkaan.
C ++: ssa voimme niputtaa datajäsenet ja toiminnot, jotka toimivat yhdessä yhden luokan sisällä. Esimerkiksi,
class Rectangle ( public: int length; int breadth; int getArea() ( return length * breadth; ) );
Yllä olevassa ohjelmassa funktio getArea()
laskee suorakulmion pinta-alan. Pinta-alan laskemiseksi se tarvitsee pituuden ja leveyden.
Siksi datajäsenet (pituus ja leveys) ja funktio getArea()
pidetään yhdessä Rectangle
luokassa.

Esimerkki 1: C ++ -kotelointi
// 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; )
Tuotos
Pinta-ala = 48
Edellä olevassa esimerkissä laskemme suorakulmion pinta-alan.
Laskea ala, tarvitsemme kaksi muuttujaa: pituus ja leveys ja funktio: getArea()
. Siksi niputimme nämä muuttujat ja toimimme yhden suorakulmion luokan sisällä.
Tässä muuttujia ja toimintoja voi käyttää myös muista luokista. Siksi tämä ei ole tietojen piilottamista .
Tämä on vain kapselointi . Pidämme vain samanlaisia koodeja yhdessä.
Huomaa: Ihmiset pitävät kapselointia usein tietojen piilottamisena, mutta se ei ole täysin totta.
Kapselointi tarkoittaa liittyvien kenttien ja menetelmien niputtamista yhdessä. Tätä voidaan käyttää tietojen piilottamiseen. Kapselointi sinänsä ei ole tietojen piilottamista.
Miksi kapselointi?
- C ++: ssa kapselointi auttaa meitä pitämään liittyvät tiedot ja toiminnot yhdessä, mikä tekee koodistamme puhtaamman ja helppolukuisemman.
- Se auttaa hallitsemaan tietojemme jäsenten muokkaamista.
Tarkastellaan tilannetta, jossa haluamme luokan pituuskentän olla ei-negatiivinen. Täällä voimme tehdä pituusmuuttujasta yksityisen ja soveltaa logiikkaa menetelmän sisälläsetAge()
. Esimerkiksi,
class Rectangle ( private: int age; public: void setLength(int len) ( if (len>= 0) length = len; ) );
- Getter- ja setter-toiminnot tarjoavat luokan jäsenille vain luku- tai kirjoitusoikeuden . Esimerkiksi,
getLength() // provides read-only access setLength() // provides write-only access
- Se auttaa irrottamaan järjestelmän komponentit. Esimerkiksi voimme kapseloida koodin useisiin nippuihin.
Nämä irrotetut komponentit (niput) voidaan kehittää, testata ja virheenkorjata itsenäisesti ja samanaikaisesti. Ja mahdollisilla tietyn komponentin muutoksilla ei ole mitään vaikutusta muihin komponentteihin. - Voimme saavuttaa myös tietojen piilottamisen kapseloinnin avulla. In esimerkissä 1 , jos muuttaa pituus ja leveys muuttujia
private
taiprotected
, sitten pääsy näillä aloilla on rajoitettu.
Ja ne pidetään piilossa ulkoluokilta. Tätä kutsutaan tietojen piilottamiseksi .
Tietojen piilottaminen
Tietojen piilottaminen on tapa rajoittaa tietojemme jäsenten pääsyä piilottamalla toteutustiedot. Kapselointi tarjoaa myös tavan tietojen piilottamiseen.
Voimme käyttää pääsymuuttujia tietojen piilottamiseksi C ++: ssa. Esimerkiksi,
Esimerkki 2: C ++ -tietojen piilottaminen yksityisen määrittimen avulla
#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; )
Tuotos
Pituus = 8 leveys = 6 pinta-ala = 48
Tässä olemme tehneet pituus- ja leveysmuuttujat private
.
Tämä tarkoittaa, että näitä muuttujia ei voida käyttää suoraan Rectangle
luokan ulkopuolella .
Käyttää näitä yksityisiä muuttujia, olemme käyttäneet public
toimintoja setLength()
, getLength()
, setBreadth()
, ja getBreadth()
. Näitä kutsutaan getter- ja setter-toiminnoiksi.
Muuttujien tekeminen yksityisiksi antoi meille mahdollisuuden rajoittaa luvatonta käyttöä luokan ulkopuolelta. Tämä on tietojen piilottamista .
Jos yritämme käyttää muuttujia main()
luokasta, saamme virheen.
// error: rectangle1.length is inaccessible rectangle1.length = 8; // error: rectangle1.breadth is inaccessible rectangle1.length = 6;