Erişim kontrolünün aşırı yük çözümünden önce geldiğini varsayalım. Etkili olarak, bu public/protected/private
erişilebilirlikten ziyade kontrollü görünürlük anlamına gelir .
Stroustrup tarafından yazılan C ++ Tasarım ve Evrimi Bölüm 2.10 , aşağıdaki örneği tartıştığı bir bölüme sahiptir.
int a; // global a
class X {
private:
int a; // member X::a
};
class XX : public X {
void f() { a = 1; } // which a?
};
Stroustrup Geçerli kurallara (erişilebilirlik önce görünürlük) yararlarından (geçici olarak) chaning olmasıdır bahseder private
içini class X
içine public
(örneğin hata ayıklama amacıyla) Yukarıdaki programın anlamında hiçbir sessiz değişiklik (yani olmasıdır X::a
çalışılır her iki durumda da erişilebilir, bu da yukarıdaki örnekte bir erişim hatası verir). Eğer public/protected/private
görünürlüğünü kontrol ediyorum, değiştirecek programın anlamı (küresel a
ile aranmak private
, aksi X::a
).
Daha sonra bunun açık bir tasarımdan mı yoksa Standard C ++ 'ya Classess selefi ile C'yi uygulamak için kullanılan önişlemci teknolojisinin bir yan etkisinden mi kaynaklandığını hatırlamadığını belirtir.
Bunun örneğinizle nasıl bir ilişkisi var? Temel olarak, Standart yapılan aşırı yük çözümlemesi, ad aramasının erişim kontrolünden önce geldiği genel kurala uyduğundan.
10.2 Üye adı araması [class.member.lookup]
1 Üye adı araması, bir sınıf kapsamındaki (3.3.7) bir adın (id-ifadesi) anlamını belirler. Ad araması bir belirsizliğe neden olabilir ve bu durumda program kötü biçimlendirilir. Bir id ifadesi için ad araması bunun sınıf kapsamında başlar; nitelenmiş kimlik için ad araması, iç içe geçmiş ad tanımlayıcısının kapsamında başlar. Ad araması, erişim kontrolünden önce gerçekleşir (3.4, Madde 11).
8 Aşırı yüklenmiş bir işlevin adı açık bir şekilde bulunursa,
aşırı yükleme çözünürlüğü (13.3) de erişim kontrolünden önce gerçekleşir . Belirsizlikler genellikle bir adı sınıf adıyla nitelendirerek çözülebilir.