Statik veya dinamik olarak erişim belirticilerinin kontrol edilmesi konusunda kafam karıştı. Erişim belirticilerinin dinamik olarak denetlenmediği söylenir. Bu ne anlama geliyor ?"Erişilebilirlik statik olarak değil, C++ 'da dinamik olarak kontrol ediliyor" ifadesini anlamanız gerekir.
Bu örnek SO üzerinde farklı posts dan alınmıştır. Bu örnek
Örnek A düşünün:
class Base
{
public:
virtual void Message() = 0;
};
class Intermediate : public Base
{
//Is Message method virtual here too ? is it private or public ?
};
class Final : public Intermediate {
void Message() {
cout << "Hello World!" << endl;
}
};
Final final;
Şimdi bu
Final* finalPtr = &final;
finalPtr->Message();
yukarıdaki alışkanlık çalışması gibi bir şey ve benim anlayış Final sınıfta Mesaj Yöntemi özel olduğunu varsayalım. Bu doğru mu ? Eğer öyleyse bu neden işe yarıyor?
Intermediate* finalPtr = &final; // or Base* finalPtr = &final;
finalPtr->Message();
yöntem temel sınıf işareti türetilmiş bir sınıf ile başlatılır için yukarıdaki kodu çalışıyor nedeni budur. Eğer öyleyse neden Message() çağrısı çalışır. SO 'daki yazı, mirasın kamuya yayılmasından bu yana kamu görevi miras alınıyor? Öte yandan, sınıftaki fonksiyonun kendisi özel erişim belirticisine sahiptir (varsayılan olarak özel olarak bir sınıfta). Burada kafam karıştı ve eğer bunu açıklığa kavuşturabilirdim. Bir temel sınıf türetilmiş bir sınıf ile örneklenmişse söylemek doğru olur muydu? Ardından, temel sınıf yönteminin erişim belirteci türetilmiş sınıfın erişim belirtecine göre öncelikli midir?
Güncelleme:
Ayrıca ben fark aşağıdaki
class Intermediate : public Base
{
public: //Incase this public was absent then the following example wont work
void Message() {
cout << "Hello World! Intermediate" << endl;
}
};
class Final : public Intermediate {
void Message() {
cout << "Hello World! final" << endl;
}
};
için Intermediate
ve Final
kodunu değiştirmek ve inorder Sonra böyle
Intermediate* i = new Final();
i->Message();
olarak kullanmak durumunda "Hello World! final"
çıktısını alın, arayüzü işaretlemek gereklidir kamu olarak yöntem. Neden ? Message
yöntemi halka olarak devralındı. Neden şimdi halka açık olarak işaretlemem gerekiyor?
Diğer mesajları bağlamış olmalısınız. Çünkü sen anlamadın, anlamadığın aynı açıklamayı alacaksın. –
Link – Rajeshwar