C ++ enkapsulacija (s primjerima)

U ovom uputstvu naučit ćemo o enkapsulaciji u C ++ uz pomoć primjera.

Inkapsulacija je jedna od ključnih značajki objektno orijentiranog programiranja. Uključuje grupiranje članova podataka i funkcija unutar jedne klase.

Spajanje sličnih članova podataka i funkcija unutar klase također pomaže u skrivanju podataka.

C ++ enkapsulacija

Općenito, enkapsulacija je postupak umotavanja sličnog koda na jedno mjesto.

U C ++ možemo grupirati članove podataka i funkcije koji djeluju zajedno unutar jedne klase. Na primjer,

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

U gornjem programu funkcija getArea()izračunava površinu pravokutnika. Da bi izračunala površinu, potrebna su joj dužina i širina.

Dakle, članovi podataka (dužina i širina) i funkcija getArea()održavaju se zajedno u Rectangleklasi.

Kapsulacija u C ++

Primjer 1: Inkapsulacija C ++

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

Izlaz

 Površina = 48

U gornjem primjeru izračunavamo površinu pravokutnika.

Za izračun površine, treba nam dvije varijable: uzduž i poprijeko i funkciju: getArea(). Stoga smo grupirali ove varijable i funkcionirali unutar jedne klase nazvane Pravokutnik.

Ovdje se varijablama i funkcijama može pristupiti i iz drugih klasa. Dakle, ovo nije skrivanje podataka .

Ovo je samo enkapsulacija . Samo držimo slične kodove zajedno.

Napomena: Ljudi često smatraju inkapsulaciju skrivanjem podataka, ali to nije sasvim točno.

Inkapsulacija se odnosi na grupiranje povezanih polja i metoda zajedno. To se može koristiti za postizanje skrivanja podataka. Inkapsulacija sama po sebi nije skrivanje podataka.

Zašto enkapsulacija?

  • U C ++-u enkapsulacija nam pomaže povezati povezane podatke i funkcije, što naš kod čini čišćim i lakim za čitanje.
    • Pomaže u kontroli izmjena naših članova podataka.
      Razmotrimo situaciju u kojoj želimo da polje duljine u klasi ne bude negativno. Ovdje varijablu duljine možemo učiniti privatnom i primijeniti logiku unutar metode setAge(). Na primjer,
       class Rectangle ( private: int age; public: void setLength(int len) ( if (len>= 0) length = len; ) );
    • Funkcije dobivača i postavljača pružaju pristup samo za čitanje ili samo za pisanje članovima našeg razreda. Na primjer,
       getLength() // provides read-only access setLength() // provides write-only access
    • Pomaže u razdvajanju komponenata sustava. Na primjer, možemo enkapsulirati kôd u više snopova.
      Te se nevezane komponente (snopovi) mogu samostalno i istodobno razvijati, testirati i ispravljati. I bilo kakve promjene u određenoj komponenti nemaju utjecaja na druge komponente.
    • Sakrivanje podataka također možemo postići pomoću enkapsulacije. U primjeru 1 , ako promijenimo varijable duljine i širine u privateili protected, tada je pristup tim poljima ograničen.
      I, skriveni su od vanjskih klasa. To se naziva skrivanje podataka .

    Sakrivanje podataka

    Sakrivanje podataka je način ograničavanja pristupa našim članovima podataka skrivanjem detalja implementacije. Inkapsulacija također pruža način za skrivanje podataka.

    Pomoću modifikatora pristupa možemo postići skrivanje podataka u C ++. Na primjer,

    Primjer 2: C ++ Sakrivanje podataka korištenjem privatnog specifikatora

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

    Izlaz

     Duljina = 8 Širina = 6 Površina = 48

    Ovdje smo napravili varijable dužine i širine private.

    To znači da se tim varijablama ne može izravno pristupiti izvan Rectangleklase.

    Da biste pristupili tim privatne varijable, mi smo koristili publicfunkcije setLength(), getLength(), setBreadth(), i getBreadth(). Oni se nazivaju getter i setter funkcije.

    Prilagođavanje varijabli privatnim omogućilo nam je ograničavanje neovlaštenog pristupa izvan klase. Ovo je skrivanje podataka .

    Ako pokušamo pristupiti varijablama iz main()klase, dobit ćemo pogrešku.

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

Zanimljivi članci...