C ++ indkapsling (med eksempler)

I denne vejledning lærer vi om indkapsling i C ++ ved hjælp af eksempler.

Indkapsling er et af nøglefunktionerne i objektorienteret programmering. Det involverer sammenlægning af datamedlemmer og funktioner i en enkelt klasse.

Bundtning af lignende datamedlemmer og funktioner inde i en klasse hjælper også med at skjule data.

C ++ indkapsling

Generelt er indkapsling en proces med indpakning af lignende kode ét sted.

I C ++ kan vi samle datamedlemmer og funktioner, der fungerer sammen i en enkelt klasse. For eksempel,

 class Rectangle ( public: int length; int breadth; int getArea() ( return length * breadth; ) );

I ovenstående program getArea()beregner funktionen arealet af et rektangel. For at beregne arealet har det brug for længde og bredde.

Derfor getArea()holdes dataelementerne (længde og bredde) og funktionen sammen i Rectangleklassen.

Indkapsling i C ++

Eksempel 1: C ++ indkapsling

 // 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; )

Produktion

 Areal = 48

I ovenstående eksempel beregner vi arealet af et rektangel.

For at beregne et område, vi har brug for to variabler: længde og bredde og en funktion: getArea(). Derfor har vi samlet disse variabler og fungerer i en enkelt klasse ved navn Rektangel.

Her kan variabler og funktioner også tilgås fra andre klasser. Derfor er dette ikke dataskydning .

Dette er kun indkapsling . Vi holder bare lignende koder sammen.

Bemærk: Folk anser ofte indkapsling for at skjule data, men det er ikke helt sandt.

Indkapsling refererer til bundtning af relaterede felter og metoder sammen. Dette kan bruges til at opnå skjulning af data. Indkapsling i sig selv skjuler ikke data.

Hvorfor indkapsling?

  • I C ++ hjælper indkapsling os med at holde relaterede data og funktioner sammen, hvilket gør vores kode renere og let at læse.
    • Det hjælper med at kontrollere ændringen af ​​vores datamedlemmer.
      Overvej en situation, hvor vi ønsker, at længdefeltet i en klasse skal være ikke-negativt. Her kan vi gøre længdevariablen privat og anvende logikken inde i metoden setAge(). For eksempel,
       class Rectangle ( private: int age; public: void setLength(int len) ( if (len>= 0) length = len; ) );
    • Getter- og setterfunktionerne giver skrivebeskyttet eller skrivebeskyttet adgang til vores klassemedlemmer. For eksempel,
       getLength() // provides read-only access setLength() // provides write-only access
    • Det hjælper med at afkoble komponenter i et system. For eksempel kan vi indkapsle kode i flere bundter.
      Disse afkoblede komponenter (bundter) kan udvikles, testes og debugges uafhængigt og samtidigt. Og eventuelle ændringer i en bestemt komponent har ingen effekt på andre komponenter.
    • Vi kan også opnå skjulning af data ved hjælp af indkapsling. I eksempel 1 , hvis vi ændrer længde og bredde variabler til privateeller protected, så er adgangen til disse felter begrænset.
      Og de holdes skjult for ydre klasser. Dette kaldes dataskydning .

    Data gemmer sig

    Dataskydning er en måde at begrænse adgangen til vores datamedlemmer ved at skjule implementeringsoplysningerne. Indkapsling giver også en måde at skjule data på.

    Vi kan bruge adgangsmodifikatorer til at opnå data gemmer sig i C ++. For eksempel,

    Eksempel 2: C ++ dataskydning ved hjælp af den private specifikator

     #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; )

    Produktion

     Længde = 8 Bredde = 6 Areal = 48

    Her har vi lavet variablerne for længde og bredde private.

    Dette betyder, at disse variabler ikke kan fås direkte uden for Rectangleklassen.

    For at få adgang til disse private variabler, har vi brugte publicfunktioner setLength(), getLength(), setBreadth(), og getBreadth(). Disse kaldes getter- og setterfunktioner.

    At gøre variablerne private tillod os at begrænse uautoriseret adgang uden for klassen. Dette skjuler sig data .

    Hvis vi forsøger at få adgang til variablerne fra main()klassen, får vi en fejl.

     // error: rectangle1.length is inaccessible rectangle1.length = 8; // error: rectangle1.breadth is inaccessible rectangle1.length = 6;

Interessante artikler...