Kata akses berarti membaca atau mengubah nilai suatu variabel, dan juga berarti menggunakan suatu fungsi. Penentu akses C++ adalah kata-kata, "pribadi," "dilindungi," dan "publik.Mereka memutuskan apakah anggota dapat mengakses anggota lain dari kelasnya, atau jika fungsi atau operator di luar kelas dan bukan milik kelas dapat mengakses anggota kelas mana pun. Mereka juga memutuskan apakah anggota kelas turunan (anak) dapat mengakses anggota kelas induk.
Pengetahuan dasar C++ diperlukan untuk memahami artikel ini dan untuk menguji kode yang disediakan.
Isi Artikel
- Penentu Publik dan Pribadi
- Penentu yang Dilindungi
- Penentu Kelas Turunan dan Penentu Anggota
- Kesimpulan
Penentu Publik dan Pribadi
Kelas
Setiap anggota kelas dapat mengakses setiap anggota lain dari kelas yang sama, independen yang diberi label "publik" atau "pribadi".” Perhatikan program berikut:
menggunakan namespace std;
kelas TheCla
pribadi:
int nomor1;
int nomor2;
publik:
Kla(int n1, int n2)
angka1 = n1; bilangan2 = n2;
metode int()
kembali nomor1;
;
int utama()
TheCla obj(10, 20);
int no2 = obj.metode();
cout<
kembali 0;
Keluarannya 10. Anggota pribadi adalah num1 dan num2. Anggota publik adalah TheCla() dan method(). Perhatikan bahwa TheCla() adalah fungsi konstruktor yang menginisialisasi variabel yang diinginkan. Wilayah penentu akses dimulai dari labelnya hingga akhir deskripsi kelas (definisi) atau ke awal penentu akses lain.
Dalam fungsi main(), pernyataan pertama adalah instantiasi yang melibatkan fungsi konstruktor, yang menginisialisasi num1 dan num2. Pernyataan berikutnya memanggil anggota publik, metode(), dari kelas.
Sekarang, dalam deskripsi kelas (definisi), fungsi anggota publik, TheCla(), mengakses anggota pribadi, num1 dan num2. Selain itu, fungsi anggota publik, metode(), mengakses anggota pribadi, num1. Setiap anggota dalam deskripsi kelas dapat mengakses anggota lain dalam deskripsi kelas yang sama; tidak masalah anggota mana yang pribadi atau publik.
Namun, fungsi atau operator yang tidak dideklarasikan dalam deskripsi kelas dan di luar deskripsi kelas hanya dapat mengakses anggota publik kelas tersebut. Fungsi main(), misalnya, adalah fungsi yang dideklarasikan di luar deskripsi kelas. Itu hanya dapat mengakses metode() dan anggota publik TheCla()(). Di dalam fungsi main(), fungsi TheCla() adalah obj(10, 20).
Fungsi luar atau operator luar, seperti fungsi main(), tidak dapat mengakses salah satu anggota pribadi kelas, seperti num1 atau num2. Hapus indikator komentar, //, dari pernyataan last-but-one di main(). Jika Anda mencoba untuk mengkompilasi program, perhatikan bahwa program tidak akan dikompilasi, memberikan pesan kesalahan.
Penentu Default
Penentu default untuk kelas adalah "pribadi".Jadi, deskripsi kelas di atas sama dengan deskripsi berikut, pribadi, tetapi tanpa specifier:
int nomor1;
int angka2;
publik:
Kla(int n1, int n2)
angka1 = n1; bilangan2 = n2;
metode int()
kembali nomor1;
;
Catatan: label penentu akses dimulai dengan penentu, dan kemudian diikuti oleh titik dua.
Penentu yang Dilindungi
Dalam deskripsi kelas, dan dari fungsi luar atau operator luar, specifier yang dilindungi sama dengan specifier pribadi. Sekarang, ganti specifier pribadi dalam program di atas dengan specifier, lindungi, dan hapus indikator komentar, //, dari pernyataan last-but-one di fungsi main(). Jika Anda mencoba untuk mengkompilasi program, perhatikan bahwa program tidak akan dikompilasi, memberikan pesan kesalahan.
Masalah specifier yang dilindungi muncul ketika anggota kelas turunan (diwariskan) harus mengakses anggota kelas dasar (induk).
Kelas Turunan Publik dengan Anggota Publik
Perhatikan program berikut:
menggunakan namespace std;
kelas TheCla
publik:
int angka1 = 10;
terlindung:
int bilangan2 = 20;
pribadi:
int angka3 = 30;
;
kelas ChildCla : TheCla publik
publik:
int metode1()
kembali nomor1;
int metode2()
kembali nomor2;
/*int metode3()
kembali nomor3;
*/
;
int utama()
ChildCla childObj;
int no1 = childObj.metode1();
cout<
cout<
Outputnya adalah:
10
20
Di kelas dasar, num1 adalah publik, num2 dilindungi, dan num3 adalah pribadi. Di kelas turunan, semua fungsi anggota bersifat publik. Fungsi pertama, method1(), mengakses anggota data publik, num1. Fungsi kedua, method2(), mengakses anggota data yang dilindungi, num2. Fungsi ketiga, method3(), meskipun saat ini dikomentari, harus mengakses anggota data pribadi, num3.
Kelas turunan tidak dideklarasikan tanpa penentu akses (publik, dilindungi, atau pribadi). Di atas, kelas turunan dideklarasikan dengan specifier publik, yaitu:
kelas ChildCla : TheCla publikSekarang batalkan komentar definisi fungsi anggota ketiga di kelas turunan. Jika Anda mencoba untuk mengkompilasi program, perhatikan bahwa itu tidak akan dikompilasi, memberikan pesan kesalahan.
Catatan: Ketika seluruh kelas turunan dideklarasikan publik, anggotanya tidak dapat mengakses anggota pribadi dari kelas dasar. Namun, anggotanya dapat mengakses anggota kelas dasar publik dan yang dilindungi. Program di atas menggambarkan hal ini.
Namun, perhatikan bahwa anggota publik dari kelas turunan publik dapat mengakses anggota kelas dasar yang dilindungi.
Penentu Kelas Turunan dan Penentu Anggota
Kelas Turunan yang Dilindungi dengan Anggota Publik
Ganti specifier “public” dengan “protected” dalam deklarasi kelas turunan di atas, sebagai berikut:
Kompilasi dan jalankan program dan perhatikan bahwa hasilnya sama seperti sebelumnya.
Jadi, ketika seluruh kelas turunan dinyatakan terlindungi, anggotanya tidak dapat mengakses anggota pribadi dari kelas dasar. Namun, anggotanya dapat mengakses anggota kelas dasar publik dan yang dilindungi. Ini sama seperti ketika kelas turunan dideklarasikan publik.
Catatan: anggota yang dilindungi dari kelas turunan publik dapat mengakses anggota kelas dasar yang dilindungi.
Kelas Turunan Privat dengan Anggota Publik
Ganti specifier “protected” dengan “private” dalam deklarasi kelas turunan di atas, sebagai berikut:
Kompilasi dan jalankan program dan perhatikan bahwa hasilnya sama seperti sebelumnya.
Jadi, ketika seluruh kelas turunan dideklarasikan sebagai pribadi, anggotanya tidak dapat mengakses anggota pribadi dari kelas dasar. Namun, anggotanya dapat mengakses anggota kelas dasar publik dan yang dilindungi. Ini sama seperti ketika kelas turunan dinyatakan terlindungi atau publik.
Kelas Turunan Publik dengan Anggota Terlindungi
Ketik, kompilasi, dan jalankan program berikut, di mana seluruh kelas turunan dilindungi, dan anggotanya juga dilindungi. Beberapa segmen kode adalah sebagai berikut:
menggunakan namespace std;
kelas TheCla
publik:
int angka1 = 10;
terlindung:
int bilangan2 = 20;
pribadi:
int angka3 = 30;
;
kelas ChildCla : TheCla publik
terlindung:
int metode1()
kembali nomor1;
int metode2()
kembali nomor2;
/*int metode3()
kembali nomor3;
*/
;
int utama()
/*ChildCla childObj;
int no1 = childObj.metode1();
cout<
cout<
Program berjalan sebagaimana adanya. Tidak ada output, dan seharusnya tidak ada output, berdasarkan bagaimana program telah diketik.
Sekarang, batalkan komentar definisi fungsi, method3(), di kelas turunan. Jika Anda mencoba untuk mengkompilasi program, perhatikan bahwa itu tidak akan dikompilasi, memberikan pesan kesalahan. Ini berarti bahwa anggota pribadi tidak dapat diakses dari fungsi luar, operator luar, atau kelas turunan. Ini adalah kesimpulan yang sama seperti yang disimpulkan di atas, mengenai akses ke anggota pribadi.
Catatan: anggota yang dilindungi dari kelas turunan yang dilindungi dapat mengakses anggota yang dilindungi dari kelas dasar.
Sekarang, letakkan kembali komentar di kelas turunan dan batalkan komentar pada segmen kode pertama di fungsi main(). Jika Anda mencoba mengkompilasi program, perhatikan bahwa program tidak akan dikompilasi karena segmen kode pertama dalam fungsi main(). Efek ini bukan hal baru. Terlepas dari kelas turunan, fungsi luar, dan operator luar, anggota yang dilindungi dan pribadi dari kelas (dasar atau turunan) memiliki specifier yang sama, pribadi. Fungsi main() melihat anggota yang dilindungi dari kelas apa pun, baik basis atau turunan, pada specifier yang sama, pribadi, dan dilarang mengaksesnya.
Jika segmen kode kedua dari fungsi main() tidak dikomentari, penjelasan yang sama akan berlaku. Artinya, fungsi main() tidak akan dapat mengakses anggota yang dilindungi atau pribadi dari kelas turunan atau kelas dasar. Ini tidak tergantung pada apakah anggota yang dilindungi dari kelas turunan dapat mengakses anggota yang dilindungi dari kelas dasar.
Kelas Turunan yang Dilindungi dengan Anggota yang Dilindungi
Ganti specifier “public” dengan “protected” dalam deklarasi kelas turunan di atas, sebagai berikut:
Masukkan komentar segmen kode kembali ke fungsi main(), jika ini belum dilakukan. Kompilasi dan jalankan program dan perhatikan bahwa hasilnya seperti sebelumnya.
Kelas Turunan Pribadi dengan Anggota Terlindungi
Ganti specifier “protected” dengan “private” dalam deklarasi kelas turunan di atas, sebagai berikut:
Kompilasi dan jalankan program dan perhatikan bahwa hasilnya akan seperti sebelumnya.
Kelas Turunan Publik dengan Anggota Pribadi
Ganti specifier “private” dengan “public” dalam deklarasi kelas turunan di atas, sebagai berikut:
Jadikan anggota kelas turunan menjadi pribadi. Kompilasi dan jalankan program. Hasilnya tidak berbeda dengan kasus “Kelas Turunan Publik dengan Anggota Terlindungi”.
Kelas Turunan yang Dilindungi dengan Anggota Pribadi
Ganti specifier “public” dengan “protected” dalam deklarasi kelas turunan di atas, sebagai berikut:
Kompilasi dan jalankan program. Hasil ini tidak berbeda dengan kasus “Kelas Turunan yang Dilindungi dengan Anggota yang Dilindungi”.
Kelas Turunan Privat dengan Anggota Privat
Ganti specifier “protected” dengan “private” dalam deklarasi kelas turunan di atas, sebagai berikut:
Kompilasi dan jalankan program. Hasil ini tidak berbeda dengan kasus “Kelas Turunan Pribadi dengan Anggota Terlindungi”.
Kesimpulan
Penentu akses C++ adalah kata-kata "pribadi", "dilindungi", dan "publik".Mereka memutuskan akses untuk anggota kelas. Wilayah penentu akses dimulai dari labelnya, hingga akhir deskripsi kelas (definisi), atau ke awal penentu akses lain. Setiap anggota kelas dapat mengakses anggota lain dari kelas yang sama. Anggota pribadi dari suatu kelas tidak dapat diakses oleh fungsi luar apa pun, operator luar mana pun, atau kelas turunan.
Anggota kelas dasar harus dibuat terlindungi sehingga anggota pribadi kelas dasar dapat diakses oleh anggota kelas turunan. Anggota kelas dasar yang dilindungi ini dipandang sebagai anggota pribadi dari kelas dasar oleh fungsi luar atau operator luar.
Anggota publik dari suatu kelas dapat diakses oleh fungsi luar apa pun, operator luar apa pun, atau kelas turunan.
Dengan tidak adanya penentu akses di kelas, penentu pribadi diasumsikan private. Artinya, penentu akses default adalah pribadi.
Referensi yang Digunakan dalam Karya Ini
- Alireza Ebrahimi, WARISAN: DAPAT DIGUNAKAN KEMBALI DAN DIPERPANJANG
- S. Malik, Struktur Data Menggunakan C++ Edisi ke-2