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 Rectangle
klasi.

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 metodesetAge()
. 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
private
iliprotected
, 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 Rectangle
klase.
Da biste pristupili tim privatne varijable, mi smo koristili public
funkcije 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;