Erişim kelimesi, bir değişkenin değerini okumak veya değiştirmek anlamına gelir ve aynı zamanda bir işlevi kullanmak anlamına gelir. C++ erişim belirteçleri, "özel", "korumalı" ve "genel" kelimeleridir.Bir üyenin sınıfının diğer üyelerine erişip erişemeyeceğine veya sınıf dışından ve sınıfa ait olmayan bir işlev veya operatörün sınıfın herhangi bir üyesine erişip erişemeyeceğine karar verirler. Ayrıca türetilmiş (alt) sınıfın bir üyesinin bir üst sınıfın bir üyesine erişip erişemeyeceğine de karar verirler.
Bu makaleyi anlamak ve sağlanan kodu test etmek için temel C++ bilgisi gereklidir.
Makale İçeriği
- Genel ve Özel Belirticiler
- Korumalı Belirtici
- Türetilmiş Sınıf Belirticiler ve Üye Belirticiler
- Sonuç
Genel ve Özel Belirticiler
Sınıf
Bir sınıfın herhangi bir üyesi, “genel” veya “özel” olarak etiketlenmiş olandan bağımsız olarak, aynı sınıfın diğer herhangi bir üyesine erişebilir.Aşağıdaki programı göz önünde bulundurun:
ad alanı std kullanarak;
sınıf TheCla
özel:
int sayı1;
int sayı2;
halka açık:
TheCla(int n1, int n2)
sayı1 = n1; sayı2 = n2;
int yöntemi()
geri sayı1;
;
int ana()
TheCla nesnesi(10, 20);
int no2 = nesne.yöntem();
cout<
0 döndür;
çıktı 10. Özel üyeler num1 ve num2'dir. Genel üyeler TheCla() ve method()'dur. TheCla()'nın ilgilenilen değişkenleri başlatan yapıcı işlev olduğuna dikkat edin. Bir erişim belirtecinin bölgesi, etiketinden sınıf tanımının (tanım) sonuna veya başka bir erişim belirtecinin başlangıcına kadar başlar.
main() işlevinde, ilk ifade, num1 ve num2'yi başlatan yapıcı işlevini içeren örneklemedir. Sonraki ifade, sınıfın genel üyesi olan method()'u çağırır.
Şimdi, sınıf açıklamasında (tanım), genel üye işlevi TheCla(), özel üyelere, num1 ve num2'ye erişir. Ayrıca, genel üye işlevi olan method(), özel üyeye (num1) erişir. Bir sınıf tanımındaki herhangi bir üye, aynı sınıf tanımındaki diğer herhangi bir üyeye erişebilir; hangi üyenin özel veya kamu olduğu önemli değil.
Ancak, sınıf tanımında ve sınıf tanımının dışında bildirilmeyen bir işlev veya operatör, yalnızca sınıfın genel üyelerine erişebilir. Örneğin main() işlevi, sınıf tanımının dışında bildirilen bir işlevdir. Yalnızca method() ve TheCla() genel üyelerine erişebildi. main() işlevinin içinde, TheCla() işlevi obj(10, 20) şeklindedir.
main() işlevi gibi bir dış işlev veya dış işleç, sınıfın num1 veya num2 gibi özel üyelerinden hiçbirine erişemez. main() içindeki son bir ifadeden //, yorum göstergesini kaldırın. Programı derlemeye çalışırsanız, programın derlenmeyeceğini ve bir hata mesajı verdiğini unutmayın.
Varsayılan Tanımlayıcı
Bir sınıf için varsayılan belirteç "private"dir.” Dolayısıyla, yukarıdaki sınıf açıklaması aşağıdaki açıklama ile aynıdır, özeldir, ancak belirteci yoktur:
int sayı1;
int sayı2;
halka açık:
TheCla(int n1, int n2)
sayı1 = n1; sayı2 = n2;
int yöntemi()
geri sayı1;
;
Not: erişim belirteci etiketi, belirteçle başlar ve ardından iki nokta üst üste gelir.
Korumalı Belirtici
Bir sınıf tanımı içinde ve bir dış fonksiyondan veya dış operatörden, korunan belirteç özel belirteçle aynıdır. Şimdi, yukarıdaki programdaki özel belirteci belirteçle değiştirin, koruyun ve yorum göstergesini //, main() işlevindeki son bir ifadeden kaldırın. Programı derlemeye çalışırsanız, programın derlenmeyeceğini ve bir hata mesajı verdiğini unutmayın.
Türetilmiş (devralınan) sınıfın üyelerinin temel (ana) sınıfın üyelerine erişmesi gerektiğinde, korumalı belirteç sorunu ortaya çıkar.
Genel Türetilmiş Sınıf Kamu Üyeleri ile
Aşağıdaki programı göz önünde bulundurun:
ad alanı std kullanarak;
sınıf TheCla
halka açık:
int sayı1 = 10;
korumalı:
int sayı2 = 20;
özel:
int sayı3 = 30;
;
sınıf ChildCla : genel TheCla
halka açık:
int yöntem1()
geri sayı1;
int yöntem2()
geri sayı2;
/*int yöntem3()
num3'ü döndür;
*/
;
int ana()
ChildCla childObj;
int no1 = childObj.Yöntem 1();
cout<
cout<
Çıktı:
10
20
Temel sınıfta, num1 geneldir, num2 korumalıdır ve num3 özeldir. Türetilmiş sınıfta, tüm üye işlevler geneldir. İlk işlev, method1(), genel veri üyesine erişir, num1. İkinci işlev, method2(), korunan veri üyesine erişir, num2. Üçüncü işlev, method3(), şu anda yorumlanmış olsa da, num3 özel veri üyesine erişmelidir.
Türetilmiş bir sınıf, erişim belirteci (genel, korumalı veya özel) olmadan bildirilmez. Yukarıda, türetilmiş sınıf, genel belirteçle bildirilir, yani:
sınıf ChildCla : genel TheClaŞimdi türetilmiş sınıftaki üçüncü üye işlev tanımının yorumunu kaldırın. Programı derlemeye çalışırsanız derlenmeyeceğine ve hata mesajı verdiğine dikkat edin.
Not: Türetilmiş sınıfın tamamı public olarak bildirildiğinde, üyeleri temel sınıfın özel üyelerine erişemez. Ancak üyeleri, temel sınıfın genel ve korumalı üyelerine erişebilir. Yukarıdaki program bunu göstermektedir.
Ancak, genel türetilmiş sınıfın genel bir üyesinin, temel sınıfın korumalı bir üyesine erişebileceğini unutmayın.
Türetilmiş Sınıf Belirticiler ve Üye Belirticiler
Genel Üyelerle Korumalı Türetilmiş Sınıf
Yukarıdaki türetilmiş sınıfın bildiriminde "public" belirtecini "protected" ile aşağıdaki gibi değiştirin:
Programı derleyin ve çalıştırın ve sonucun öncekiyle aynı olduğunu unutmayın.
Bu nedenle, türetilmiş sınıfın tamamı korumalı olarak bildirildiğinde, üyeleri temel sınıfın özel üyelerine erişemez. Ancak üyeleri, temel sınıfın genel ve korumalı üyelerine erişebilir. Bu, türetilmiş sınıfın genel ilan edildiği zamankiyle aynıdır.
Not: genel türetilmiş sınıfın korumalı bir üyesi, temel sınıfın korumalı bir üyesine erişebilir.
Genel Üyelerle Özel Türetilmiş Sınıf
Yukarıdaki türetilmiş sınıfın bildiriminde "korumalı" belirteci "özel" ile aşağıdaki gibi değiştirin:
Programı derleyin ve çalıştırın ve sonucun öncekiyle aynı olduğunu unutmayın.
Bu nedenle, türetilmiş sınıfın tamamı özel olarak bildirildiğinde, üyeleri temel sınıfın özel üyelerine erişemez. Ancak üyeleri, temel sınıfın genel ve korumalı üyelerine erişebilir. Bu, türetilmiş sınıfın korumalı veya genel olarak bildirilmesiyle aynıdır.
Korumalı Üyelerle Genel Türetilmiş Sınıf
Tüm türetilmiş sınıfın ve üyelerinin de korunduğu aşağıdaki programı yazın, derleyin ve çalıştırın. Bazı kod bölümleri aşağıdaki gibidir:
ad alanı std kullanarak;
sınıf TheCla
halka açık:
int sayı1 = 10;
korumalı:
int sayı2 = 20;
özel:
int sayı3 = 30;
;
sınıf ChildCla : genel TheCla
korumalı:
int yöntem1()
geri sayı1;
int yöntem2()
geri sayı2;
/*int yöntem3()
num3'ü döndür;
*/
;
int ana()
/*ChildCla childObj;
int no1 = childObj.Yöntem 1();
cout<
cout<
Program olduğu gibi çalışıyor. Çıktı yok ve programın nasıl yazıldığına bağlı olarak herhangi bir çıktı olması gerekmiyor.
Şimdi, türetilmiş sınıftaki method3() fonksiyon tanımının yorumunu kaldırın. Programı derlemeye çalışırsanız derlenmeyeceğine ve hata mesajı verdiğine dikkat edin. Bu, özel bir üyeye bir dış işlevden, dış operatörden veya türetilmiş sınıftan erişilemeyeceği anlamına gelir. Bu, özel bir üyeye erişimle ilgili olarak yukarıda varılanla aynı sonuçtur.
Not: korumalı türetilmiş sınıfın korumalı bir üyesi, temel sınıfın korumalı bir üyesine erişebilir.
Şimdi, yorumları türetilmiş sınıfa geri koyun ve main() işlevindeki ilk kod parçasının yorumunu kaldırın. Programı derlemeye çalışırsanız, main() işlevindeki ilk kod parçası nedeniyle programın derlenmeyeceğini unutmayın. Bu etki yeni değil. Türetilmiş sınıf, dış işlevler ve dış işleçler dışında, bir (temel veya türetilmiş) sınıfın korumalı ve özel üyeleri aynı belirteçtir, özel. main() işlevi, ister temel ister türetilmiş olsun, aynı belirticiye göre herhangi bir sınıfın korumalı üyesini özel olarak görür ve ona erişmesi yasaktır.
main() işlevinin ikinci kod parçası yorumlanmamışsa, aynı açıklama geçerli olacaktır. Yani, main() işlevi, türetilmiş sınıfın veya temel sınıfın korumalı veya özel bir üyesine erişemez. Bu, türetilmiş sınıfın korumalı bir üyesinin temel sınıfın korumalı bir üyesine erişip erişemeyeceğinden bağımsızdır.
Korumalı Üyelerle Korumalı Türetilmiş Sınıf
Yukarıdaki türetilmiş sınıfın bildiriminde "public" belirtecini "protected" ile aşağıdaki gibi değiştirin:
Bu daha önce yapılmadıysa, kod bölümlerinin yorumunu main() işlevine geri koyun. Programı derleyin ve çalıştırın ve sonucun eskisi gibi olduğunu unutmayın.
Korumalı Üyelerle Özel Türetilmiş Sınıf
Yukarıdaki türetilmiş sınıfın bildiriminde "korumalı" belirteci "özel" ile aşağıdaki gibi değiştirin:
Programı derleyin ve çalıştırın ve sonucun eskisi gibi olacağını unutmayın.
Özel Üyelerle Genel Türetilmiş Sınıf
Yukarıdaki türetilmiş sınıfın bildiriminde "private" belirtecini "public" ile aşağıdaki gibi değiştirin:
Türetilmiş sınıfın üyelerini özel yap. Programı derleyin ve çalıştırın. Sonuç, “Korunan Üyelerle Kamudan Türetilmiş Sınıf” davasından farklı değil.
Özel Üyelerle Korumalı Türetilmiş Sınıf
Yukarıdaki türetilmiş sınıfın bildiriminde "public" belirtecini "protected" ile aşağıdaki gibi değiştirin:
Programı derleyin ve çalıştırın. Bu sonuç, “Korumalı Üyeleri ile Korumalı Türetilmiş Sınıf” davasından farklı değildir.
Özel Üyelerle Özel Türetilmiş Sınıf
Yukarıdaki türetilmiş sınıfın bildiriminde "korumalı" belirteci "özel" ile aşağıdaki gibi değiştirin:
Programı derleyin ve çalıştırın. Bu sonucun “Korunan Üyeleri Olan Özel Türetilmiş Sınıf” davasından farkı yoktur.
Sonuç
C++ erişim belirteçleri, "özel", "korumalı" ve "genel" kelimeleridir.Bir sınıfın üyeleri için erişime karar verirler. Bir erişim belirtecinin bölgesi, etiketinden, sınıf tanımının (tanım) sonuna veya başka bir erişim belirtecinin başlangıcına kadar başlar. Bir sınıfın herhangi bir üyesi, aynı sınıfın diğer herhangi bir üyesine erişebilir. Bir sınıfın özel üyesine herhangi bir dış işlev, herhangi bir dış operatör veya türetilmiş bir sınıf tarafından erişilemez.
Temel sınıfın üyesi, türetilmiş sınıfın bir üyesi tarafından temel sınıfın özel bir üyesine erişilebilmesi için korumalı hale getirilmelidir. Temel sınıfın bu korumalı üyesi, bir dış işlev veya bir dış operatör tarafından temel sınıfın özel bir üyesi olarak görülür.
Bir sınıfın genel üyesine herhangi bir dış işlev, herhangi bir dış operatör veya türetilmiş bir sınıf tarafından erişilebilir.
Bir sınıfta herhangi bir erişim belirteci yoksa, özel belirtecin olduğu varsayılır. Yani, varsayılan erişim belirteci özeldir.
Bu Çalışmada Kullanılan Referanslar
- Alireza Ebrahimi, MİRAS: YENİDEN KULLANILABİLİRLİK VE GENİŞLETİLEBİLİRLİK
- S. Malik, C++ 2. Sürüm Kullanan Veri Yapıları