C ++ innkapsling (med eksempler)

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 Rectangleklassen.

Innkapsling i C ++

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 metoden setAge(). 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 privateeller protected, 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 Rectangleklassen.

    For å få tilgang til disse private variablene, har vi brukt publicfunksjoner 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;

Interessante artikler...