Dalam tutorial ini, kita akan belajar mengenai enkapsulasi dalam C ++ dengan bantuan contoh.
Encapsulation adalah salah satu ciri utama pengaturcaraan berorientasikan objek. Ia melibatkan kumpulan data anggota dan fungsi dalam satu kelas.
Penggabungan anggota dan fungsi data yang serupa di dalam kelas bersama-sama juga membantu dalam penyembunyian data.
Enkapsulasi C ++
Secara umum, enkapsulasi adalah proses membungkus kod yang serupa di satu tempat.
Di C ++, kita dapat menggabungkan anggota data dan fungsi yang beroperasi bersama dalam satu kelas. Sebagai contoh,
class Rectangle ( public: int length; int breadth; int getArea() ( return length * breadth; ) );
Dalam program di atas, fungsi getArea()
mengira luas segiempat tepat. Untuk mengira luasnya, ia memerlukan panjang dan lebar.
Oleh itu, ahli data (panjang dan lebar) dan fungsinya getArea()
disimpan bersama di dalam Rectangle
kelas.

Contoh 1: Enkapsulasi 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; )
Pengeluaran
Keluasan = 48
Dalam contoh di atas, kami mengira luas segiempat tepat.
Untuk mengira kawasan, kita perlu dua pembolehubah: panjang dan keluasan dan fungsi: getArea()
. Oleh itu, kami menggabungkan pemboleh ubah ini dan berfungsi dalam satu kelas bernama Rectangle.
Di sini, pemboleh ubah dan fungsi dapat diakses dari kelas lain juga. Oleh itu, ini bukan penyembunyian data .
Ini hanya enkapsulasi . Kami hanya menyimpan kod yang serupa.
Catatan: Orang sering menganggap enkapsulasi sebagai penyembunyian data, tetapi itu tidak benar.
Encapsulation merujuk kepada gabungan bidang dan kaedah yang berkaitan bersama. Ini boleh digunakan untuk mencapai penyembunyian data. Encapsulation dengan sendirinya bukanlah penyembunyian data.
Mengapa Encapsulation?
- Dalam C ++, enkapsulasi membantu kami menyimpan data dan fungsi yang berkaitan, yang menjadikan kod kami lebih bersih dan mudah dibaca.
- Ini membantu mengawal pengubahsuaian anggota data kami.
Pertimbangkan situasi di mana kita mahu bidang panjang dalam kelas tidak negatif. Di sini kita boleh menjadikan pemboleh ubah panjang sebagai peribadi dan menerapkan logik di dalam kaedah inisetAge()
. Sebagai contoh,
class Rectangle ( private: int age; public: void setLength(int len) ( if (len>= 0) length = len; ) );
- Fungsi getter dan setter memberikan akses baca sahaja atau tulis sahaja kepada ahli kelas kami. Sebagai contoh,
getLength() // provides read-only access setLength() // provides write-only access
- Ia membantu mencabut komponen sistem. Sebagai contoh, kita dapat merangkum kod menjadi beberapa kumpulan.
Komponen yang dipisahkan (bundle) ini dapat dikembangkan, diuji, dan debug secara bebas dan serentak. Dan sebarang perubahan pada komponen tertentu tidak memberi kesan kepada komponen lain. - Kami juga dapat mencapai penyembunyian data menggunakan enkapsulasi. Dalam Contoh 1 , jika kita mengubah pemboleh ubah panjang dan lebar menjadi
private
atauprotected
, maka akses ke medan ini dibatasi.
Dan, mereka tersembunyi dari kelas luar. Ini dipanggil penyembunyian data .
Penyembunyian Data
Penyembunyian data adalah cara untuk menyekat akses ahli data kami dengan menyembunyikan perincian pelaksanaan. Encapsulation juga menyediakan cara untuk menyembunyikan data.
Kita boleh menggunakan pengubah akses untuk mencapai penyembunyian data di C ++. Sebagai contoh,
Contoh 2: Penyembunyian Data C ++ Menggunakan Penentu peribadi
#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; )
Pengeluaran
Panjang = 8 Lebar = 6 Luas = 48
Di sini, kami telah membuat pemboleh ubah panjang dan lebar private
.
Ini bermaksud bahawa pemboleh ubah ini tidak dapat diakses secara langsung di luar Rectangle
kelas.
Untuk mengakses pembolehubah swasta, kita telah menggunakan public
fungsi setLength()
, getLength()
, setBreadth()
, dan getBreadth()
. Ini dipanggil fungsi getter dan setter.
Menjadikan pemboleh ubah bersifat peribadi membolehkan kami menyekat akses tanpa kebenaran dari luar kelas. Ini adalah penyembunyian data .
Sekiranya kita cuba mengakses pemboleh ubah dari main()
kelas, kita akan mendapat ralat.
// error: rectangle1.length is inaccessible rectangle1.length = 8; // error: rectangle1.breadth is inaccessible rectangle1.length = 6;