Penentu Akses C ++

C Access Specifiers



Dalam C ++, kelas adalah sekumpulan pemboleh ubah dan fungsi yang telah dikonfigurasi untuk bekerjasama. Apabila pemboleh ubah kelas diberi nilai, objek diperoleh. Objek mempunyai pemboleh ubah dan fungsi yang sama seperti kelas, tetapi kali ini, pemboleh ubah mempunyai nilai. Banyak objek boleh dibuat dari satu kelas. Satu objek berbeza dari objek lain mengikut set nilai yang diberikan kepada pemboleh ubah objek lain. Membuat objek dari kelas dikatakan sebagai objek. Walaupun dua objek yang berbeza mempunyai nilai yang sama untuk pemboleh ubahnya, objek ini adalah entiti yang berbeza, yang dikenal pasti dengan nama yang berbeza dalam program ini. Pemboleh ubah untuk objek dan kelasnya yang sesuai dipanggil anggota data. Fungsi objek dan kelasnya yang sesuai disebut fungsi anggota. Anggota data dan fungsi anggota dipanggil anggota.

Akses perkataan bermaksud membaca atau mengubah nilai pemboleh ubah, dan ini juga bermaksud menggunakan fungsi. Penentu akses C ++ adalah perkataan, peribadi, dilindungi, dan umum. Mereka memutuskan sama ada seorang anggota dapat mengakses ahli kelasnya yang lain, atau jika seorang anggota atau kelas yang mempunyai fungsi atau pengendali di luar kelas boleh mengakses mana-mana ahli kelas tersebut. Mereka juga memutuskan sama ada ahli kelas turunan (anak) boleh mengakses ahli kelas induk.







Pengetahuan asas mengenai C ++ diperlukan untuk memahami artikel ini dan untuk menguji kod yang disediakan.



Kandungan Artikel

Penentu Awam dan Swasta

Kelas
Mana-mana ahli kelas boleh mengakses mana-mana ahli lain dari kelas yang sama, yang tidak dilabelkan awam atau swasta. Pertimbangkan program berikut:



#sertakan
menggunakan ruang namaJam;

kelasTheCla
{
peribadi:
intbilangan1;
intbilangan2;
awam:
TheCla(intn1,intn2)
{
bilangan1=n1;bilangan2=n2;
}
intkaedah()
{
kembalibilangan1;
}
};

intutama()
{
TheCla obj(10,dua puluh);
intno2=objkaedah();
kos<<no2<<' n';

// int no1 = obj.num1;

kembali 0;
}

Keluarannya adalah 10. Ahli persendirian adalah num1 dan num2. Anggota awam adalah TheCla () dan kaedah (). Perhatikan bahawa TheCla () adalah fungsi konstruktor yang memulakan pemboleh ubah minat. Kawasan penentu akses bermula dari labelnya hingga akhir deskripsi kelas (definisi) atau hingga permulaan penentu akses lain.





Dalam fungsi utama (), pernyataan pertama adalah contoh yang melibatkan fungsi konstruktor, yang menginisialisasi num1 dan num2. Pernyataan seterusnya memanggil anggota awam, kaedah (), kelas.

Sekarang, dalam keterangan kelas (definisi), fungsi anggota awam, TheCla (), mengakses ahli peribadi, num1 dan num2. Juga, fungsi anggota awam, kaedah (), mengakses anggota persendirian, num1. Mana-mana ahli dalam keterangan kelas dapat mengakses mana-mana ahli lain dalam keterangan kelas yang sama; tidak kira ahli mana yang bersifat peribadi atau awam.



Walau bagaimanapun, fungsi atau pengendali yang tidak dinyatakan dalam keterangan kelas dan di luar keterangan kelas hanya dapat mengakses anggota kelas awam. Fungsi utama (), misalnya, adalah fungsi yang dinyatakan di luar keterangan kelas. Ia hanya dapat mengakses kaedah () dan anggota awam TheCla (). Di dalam fungsi utama (), fungsi TheCla () adalah obj (10, 20).

Fungsi luar atau operator luar, seperti fungsi utama (), tidak dapat mengakses mana-mana anggota peribadi kelas, seperti num1 atau num2. Keluarkan penunjuk komen, //, dari pernyataan terakhir-tetapi-satu di utama (). Sekiranya anda cuba menyusun program, perhatikan bahawa program tersebut tidak akan menyusun, memberikan mesej ralat.

Penentu Lalai
Penentu lalai untuk kelas adalah peribadi. Jadi, keterangan kelas di atas adalah sama dengan keterangan berikut, peribadi, tetapi tanpa penentu:

kelasTheCla
{
intbilangan1;
intbilangan2;
awam:
TheCla(intn1,intn2)
{
bilangan1=n1;bilangan2=n2;
}
intkaedah()
{
kembalibilangan1;
}
};

Catatan : label penentu akses bermula dengan penentu, dan kemudian diikuti dengan titik dua.

Penentu yang Dilindungi

Dalam keterangan kelas, dan dari fungsi luar atau operator luar, penentu yang dilindungi adalah sama dengan penentu peribadi. Sekarang, ganti penentu peribadi dalam program di atas dengan penentu, lindungi, dan keluarkan penunjuk komen, //, dari pernyataan terakhir-tetapi-satu dalam fungsi utama (). Sekiranya anda cuba menyusun program, perhatikan bahawa program tersebut tidak akan menyusun, memberikan mesej ralat.

Masalah penentu yang dilindungi muncul apabila anggota kelas yang diturunkan (diwarisi) mesti mengakses ahli kelas asas (induk).

Kelas Berasal Awam dengan Anggota Awam
Pertimbangkan program berikut:

#sertakan
menggunakan ruang namaJam;

kelasTheCla
{
awam:
intbilangan1= 10;
dilindungi:
intbilangan2= dua puluh;
peribadi:
intbilangan3= 30;
};

kelasAnakCla: awamTheCla
{
awam:
intkaedah1()
{
kembalibilangan1;
}
intkaedah2()
{
kembalibilangan2;
}
/ * kaedah int3 ()
{
pulangkan nombor3;
} * /

};

intutama()
{
ChildCla anakObj;
intno1=anakObj.kaedah1();
kos<<no1<<' n';

intno2=anakObj.kaedah2();
kos<<no2<<' n';

kembali 0;
}

Keluarannya adalah:
10
dua puluh

Di kelas asas, num1 bersifat umum, num2 dilindungi, dan num3 bersifat peribadi. Di kelas turunan, semua fungsi anggota adalah umum. Fungsi pertama, kaedah1 (), mengakses anggota data awam, num1. Fungsi kedua, kaedah2 (), mengakses anggota data yang dilindungi, num2. Fungsi ketiga, kaedah3 (), walaupun saat ini dikomentari, harus mengakses anggota data peribadi, num3.

Kelas turunan tidak dinyatakan tanpa penentu akses (awam, dilindungi, atau peribadi). Di atas, kelas turunan dinyatakan dengan penentu umum, iaitu:

kelasAnakCla: awamTheCla{}

Sekarang hapus komen definisi fungsi anggota ketiga di kelas turunan. Sekiranya anda cuba menyusun program, perhatikan bahawa program itu tidak akan disusun, memberikan mesej ralat.

Catatan : Apabila keseluruhan kelas turunan diisytiharkan sebagai umum, anggotanya tidak dapat mengakses anggota peribadi kelas asas. Bagaimanapun, anggotanya dapat mengakses orang awam dan anggota kelas dasar yang dilindungi. Program di atas menggambarkan perkara ini.

Walau bagaimanapun, perhatikan bahawa anggota awam kelas turunan awam boleh mengakses anggota kelas asas yang dilindungi.

Penentu Kelas Berasal dan Penentu Ahli

Kelas Berasal yang Dilindungi dengan Anggota Awam
Ganti penentu umum dengan dilindungi dalam pernyataan kelas turunan di atas, seperti berikut:

kelasAnakCla: dilindungiTheCla{}

Susun dan jalankan program dan perhatikan bahawa hasilnya sama seperti sebelumnya.

Oleh itu, apabila keseluruhan kelas turunan dinyatakan dilindungi, anggotanya tidak dapat mengakses anggota peribadi kelas asas. Bagaimanapun, anggotanya dapat mengakses orang awam dan anggota kelas dasar yang dilindungi. Ini sama seperti ketika kelas turunan diisytiharkan untuk umum.

Catatan : anggota kelas perlindungan yang dilindungi awam boleh mengakses anggota kelas asas yang dilindungi.

Kelas Berasal Swasta dengan Anggota Awam
Ganti penentu yang dilindungi dengan peribadi dalam pernyataan kelas turunan di atas, seperti berikut:

kelasAnakCla: peribadiTheCla{}

Susun dan jalankan program dan perhatikan bahawa hasilnya sama seperti sebelumnya.

Oleh itu, apabila keseluruhan kelas turunan diisytiharkan sebagai peribadi, ahli-ahlinya tidak dapat mengakses anggota persendirian dari kelas asas. Bagaimanapun, anggotanya dapat mengakses orang awam dan anggota kelas dasar yang dilindungi. Ini sama seperti ketika kelas turunan dinyatakan dilindungi atau umum.

Kelas Berasal dari Orang ramai dengan Anggota yang Dilindungi
Ketik, kompilasi, dan jalankan program berikut, di mana seluruh kelas turunan dilindungi, dan anggotanya juga dilindungi. Beberapa segmen kod adalah seperti berikut:

#sertakan
menggunakan ruang namaJam;

kelasTheCla
{
awam:
intbilangan1= 10;
dilindungi:
intbilangan2= dua puluh;
peribadi:
intbilangan3= 30;
};

kelasAnakCla: awamTheCla
{
dilindungi:
intkaedah1()
{
kembalibilangan1;
}
intkaedah2()
{
kembalibilangan2;
}
/ * kaedah int3 ()
{
pulangkan nombor3;
} * /

};

intutama()
{
/ * ChildCla childObj;
int no1 = childObj.m Method1 ();
kos<
/ * int no2 = childObj.method2 ();
kos<
kembali 0;
}

Program ini berfungsi sebagaimana adanya. Tidak ada output, dan tidak seharusnya ada output, berdasarkan bagaimana program telah diketik.

Sekarang, hapus komen definisi fungsi, kaedah3 (), di kelas turunan. Sekiranya anda cuba menyusun program, perhatikan bahawa program itu tidak akan disusun, memberikan mesej ralat. Ini bermaksud bahawa anggota peribadi tidak dapat diakses dari fungsi luar, pengendali luar, atau kelas turunan. Ini adalah kesimpulan yang sama seperti yang disimpulkan di atas, mengenai akses kepada anggota persendirian.

Catatan : anggota kelas perlindungan yang dilindungi boleh mengakses anggota kelas asas yang dilindungi.

Sekarang, masukkan semula komen di kelas yang berasal dan hapus komen segmen kod pertama dalam fungsi utama (). Sekiranya anda cuba menyusun program, perhatikan bahawa program tidak akan menyusun kerana segmen kod pertama dalam fungsi () utama. Kesan ini bukanlah perkara baru. Terlepas dari kelas turunan, fungsi luar, dan pengendali luar, anggota dilindungi dan peribadi kelas (asas atau turunan) adalah penentu yang sama, peribadi. Fungsi utama () melihat anggota yang dilindungi dari kelas apa pun, sama ada asas atau turunan, sebagai penentu yang sama, peribadi, dan dilarang mengaksesnya.

Sekiranya segmen kod kedua fungsi utama () tidak dikomentari, penjelasan yang sama akan berlaku. Maksudnya, fungsi utama () tidak akan dapat mengakses anggota dilindungi atau peribadi kelas turunan atau kelas asas. Ini tidak bergantung kepada sama ada anggota kelas perlindungan yang dilindungi dapat mengakses anggota kelas asas yang dilindungi.

Kelas Berasal yang Dilindungi dengan Anggota yang Dilindungi
Ganti penentu umum dengan dilindungi dalam pernyataan kelas turunan di atas, seperti berikut:

kelasAnakCla: dilindungiTheCla{}

Masukkan komen segmen kod kembali ke fungsi utama (), jika ini belum dilakukan. Susun dan jalankan program dan perhatikan bahawa hasilnya seperti sebelumnya.

Kelas Berasal Persendirian dengan Anggota yang Dilindungi
Ganti penentu yang dilindungi dengan peribadi dalam pernyataan kelas turunan di atas, seperti berikut:

kelasAnakCla: peribadiTheCla

Susun dan jalankan program dan perhatikan bahawa hasilnya akan seperti sebelumnya.

Kelas Berasal dari Umum dengan Ahli Persendirian
Ganti penentu peribadi dengan umum dalam pengisytiharan kelas turunan di atas, seperti berikut:

kelasAnakCla: awamTheCla{}

Jadikan ahli kelas yang berasal menjadi peribadi. Menyusun dan menjalankan program. Hasilnya tidak berbeza dengan kelas Public Derived with Protected Members.

Kelas Berasal yang Dilindungi dengan Ahli Swasta
Ganti penentu umum dengan dilindungi dalam pernyataan kelas turunan di atas, seperti berikut:

kelasAnakCla: dilindungiTheCla{}

Menyusun dan menjalankan program. Hasil ini tidak berbeza dengan kelas Protected Derived with Protected Members.

Kelas Berasal Persendirian dengan Ahli Peribadi
Ganti penentu yang dilindungi dengan peribadi dalam pernyataan kelas turunan di atas, seperti berikut:

kelasAnakCla: peribadiTheCla{}

Menyusun dan menjalankan program. Hasil ini tidak berbeza dengan kes Kelas Berasal Swasta dengan Anggota yang Dilindungi.

Kesimpulannya

Penentu akses C ++ adalah kata-kata peribadi, dilindungi, dan umum. Mereka memutuskan akses untuk ahli kelas. Kawasan penentu akses bermula dari labelnya, hingga akhir deskripsi kelas (definisi), atau hingga permulaan penentu akses lain. Mana-mana ahli kelas boleh mengakses mana-mana ahli kelas yang sama. Anggota peribadi kelas tidak dapat diakses oleh fungsi luar mana pun, pengendali luar, atau kelas turunan.

Anggota kelas asas mesti dilindungi supaya anggota peribadi kelas asas dapat diakses oleh anggota kelas turunan. Anggota kelas asas yang dilindungi ini dilihat sebagai anggota peribadi kelas asas oleh fungsi luar atau pengendali luar.

Anggota awam kelas boleh diakses oleh mana-mana fungsi luar, mana-mana pengendali luar, atau kelas yang berasal.

Sekiranya tiada penentu akses dalam kelas, penentu peribadi dianggap. Iaitu, penentu akses lalai adalah peribadi.

Rujukan yang Digunakan dalam Karya Ini