I denne opplæringen vil vi lære om innkapsling i C ++ ved hjelp av eksempler.
Innkapsling er en av nøkkelegenskapene til objektorientert programmering. Det innebærer samling av datamedlemmer og funksjoner i en enkelt klasse.
Å samle lignende datamedlemmer og funksjoner i en klasse sammen hjelper også med å skjule data.
C ++ innkapsling
Generelt er innkapsling en prosess med innpakning av lignende kode på ett sted.
I C ++ kan vi pakke datamedlemmer og funksjoner som fungerer sammen i en enkelt klasse. For eksempel,
class Rectangle ( public: int length; int breadth; int getArea() ( return length * breadth; ) );
I programmet ovenfor getArea()
beregner funksjonen arealet til et rektangel. For å beregne arealet trenger det lengde og bredde.
Derfor getArea()
holdes dataelementene (lengde og bredde) og funksjonen sammen i Rectangle
klassen.

Eksempel 1: C ++ innkapsling
// 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; )
Produksjon
Areal = 48
I eksemplet ovenfor beregner vi arealet til et rektangel.
For å beregne et område, trenger vi to variabler: lengde og bredde og en funksjon: getArea()
. Derfor har vi samlet disse variablene og fungerer i en enkelt klasse som heter Rektangel.
Her kan du også få tilgang til variablene og funksjonene fra andre klasser. Derfor er dette ikke dataskjuling .
Dette er bare innkapsling . Vi holder bare lignende koder sammen.
Merk: Folk anser ofte innkapsling som skjuling av data, men det er ikke helt sant.
Innkapsling refererer til samling av relaterte felt og metoder sammen. Dette kan brukes til å oppnå skjuling av data. Innkapsling i seg selv skjuler ikke data.
Hvorfor innkapsling?
- I C ++ hjelper innkapsling oss med å holde relaterte data og funksjoner sammen, noe som gjør koden vår renere og lett å lese.
- Det hjelper å kontrollere modifiseringen av datamedlemmene våre.
Vurder en situasjon der vi vil at lengdefeltet i en klasse skal være ikke-negativt. Her kan vi gjøre lengdevariabelen privat og bruke logikken inne i metodensetAge()
. For eksempel,
class Rectangle ( private: int age; public: void setLength(int len) ( if (len>= 0) length = len; ) );
- Getter- og setterfunksjonene gir skrivebeskyttet eller skrivebeskyttet tilgang til våre klassemedlemmer. For eksempel,
getLength() // provides read-only access setLength() // provides write-only access
- Det hjelper å koble fra komponenter i et system. For eksempel kan vi kapsle inn koden i flere bunter.
Disse frakoblede komponentene (bunter) kan utvikles, testes og feilsøkes uavhengig og samtidig. Og eventuelle endringer i en bestemt komponent har ingen innvirkning på andre komponenter. - Vi kan også oppnå skjulning av data ved hjelp av innkapsling. I eksempel 1 , hvis vi endrer variablene for lengde og bredde til
private
ellerprotected
, så er tilgangen til disse feltene begrenset.
Og de holdes skjult for ytre klasser. Dette kalles dataskjuling .
Datahulling
Datahulling er en måte å begrense tilgangen til våre datamedlemmer ved å skjule implementeringsdetaljene. Innkapsling gir også en måte å skjule data på.
Vi kan bruke tilgangsmodifikatorer for å oppnå skjulning av data i C ++. For eksempel,
Eksempel 2: C ++ datahulling med den private spesifikatoren
#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; )
Produksjon
Lengde = 8 Bredde = 6 Areal = 48
Her har vi laget lengde- og breddevariablene private
.
Dette betyr at disse variablene ikke kan nås direkte utenfor Rectangle
klassen.
For å få tilgang til disse private variablene, har vi brukt public
funksjoner setLength()
, getLength()
, setBreadth()
, og getBreadth()
. Disse kalles getter- og setterfunksjoner.
Å gjøre variablene private tillot oss å begrense uautorisert tilgang utenfor klassen. Dette skjuler seg data .
Hvis vi prøver å få tilgang til variablene fra main()
klassen, får vi en feil.
// error: rectangle1.length is inaccessible rectangle1.length = 8; // error: rectangle1.breadth is inaccessible rectangle1.length = 6;