Kapsulacija C ++ (z primeri)

V tej vadnici bomo s pomočjo primerov spoznali inkapsulacijo v jeziku C ++.

Kapsulacija je ena ključnih značilnosti objektno usmerjenega programiranja. Vključuje združevanje podatkovnih članov in funkcij znotraj enega razreda.

Združevanje podobnih podatkovnih članov in funkcij znotraj razreda prav tako pomaga pri skrivanju podatkov.

Kapsulacija C ++

Na splošno je enkapsulacija postopek zavijanja podobne kode na enem mestu.

V C ++ lahko združimo člane podatkov in funkcije, ki delujejo skupaj znotraj enega razreda. Na primer

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

V zgornjem programu funkcija getArea()izračuna površino pravokotnika. Za izračun površine potrebuje dolžino in širino.

Zato se podatki predajo (dolžina in širina) in funkcija getArea()v Rectanglerazredu.

Kapsulacija v C ++

Primer 1: Kapsulacija 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; )

Izhod

 Površina = 48

V zgornjem primeru izračunamo površino pravokotnika.

Za izračun območje, moramo dve spremenljivki: dolžino in širino in funkcijo: getArea(). Zato smo te spremenljivke združili v skupino in delovali znotraj enega razreda z imenom Rectangle.

Tu lahko do spremenljivk in funkcij dostopate tudi iz drugih razredov. Zato to ni skrivanje podatkov .

To je samo enkapsulacija . Podobne kode samo hranimo skupaj.

Opomba: Ljudje pogosto obravnavajo enkapsulacijo kot skrivanje podatkov, kar pa ni povsem res.

Kapsulacija se nanaša na združevanje povezanih polj in metod skupaj. S tem lahko dosežemo skrivanje podatkov. Kapsulacija sama po sebi ni skrivanje podatkov.

Zakaj kapsulacija?

  • V C ++ nam enkapsulacija pomaga ohranjati povezane podatke in funkcije skupaj, zaradi česar je naša koda čistejša in enostavnejša za branje.
    • Pomaga pri nadzoru spreminjanja naših podatkovnih članov.
      Razmislimo o situaciji, ko želimo, da je dolžinsko polje v razredu negativno. Tu lahko spremenljivko dolžine naredimo zasebno in uporabimo logiko znotraj metode setAge(). Na primer
       class Rectangle ( private: int age; public: void setLength(int len) ( if (len>= 0) length = len; ) );
    • Funkcije pridobivanja in nastavitve omogočajo članom našega razreda dostop samo za branje ali samo pisanje . Na primer
       getLength() // provides read-only access setLength() // provides write-only access
    • Pomaga ločiti komponente sistema. Kodo lahko na primer vključimo v več snopov.
      Te ločene komponente (svežnje) je mogoče razvijati, preizkušati in odpravljati napake neodvisno in sočasno. Kakršne koli spremembe določene komponente nimajo nobenega vpliva na druge komponente.
    • Skrivanje podatkov lahko dosežemo tudi z enkapsulacijo. V primeru 1 , če spremenljivke dolžine in širine spremenimo v privateali protected, je dostop do teh polj omejen.
      In skriti so pred zunanjimi razredi. To se imenuje skrivanje podatkov .

    Skrivanje podatkov

    Skrivanje podatkov je način omejevanja dostopa naših podatkovnih članov s skrivanjem podrobnosti o izvedbi. Enkapsulacija omogoča tudi skrivanje podatkov.

    Z modifikatorji dostopa lahko dosežemo skrivanje podatkov v jeziku C ++. Na primer

    Primer 2: Skrivanje podatkov C ++ z uporabo zasebnega specifikatorja

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

    Izhod

     Dolžina = 8 Širina = 6 Površina = 48

    Tu smo naredili spremenljivke dolžine in širine private.

    To pomeni, da teh spremenljivk ni mogoče neposredno dostopati zunaj Rectanglerazreda.

    Za dostop do teh zasebnih spremenljivke, ki smo jih uporabljajo publicfunkcije setLength(), getLength(), setBreadth(), in getBreadth(). Te se imenujejo getter in setter funkcije.

    Če spremenljivke naredimo zasebne, smo lahko omejili nepooblaščen dostop zunaj razreda. To je skrivanje podatkov .

    Če poskusimo dostopati do spremenljivk iz main()razreda, bomo dobili napako.

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

Zanimive Članki...