2008-11-21 16 views
5

Sadece belirli bir sınıf hiyerarşisinde sınıfların ihtiyaç duyduğu bir sınıfa sahibim. Sınıfı en yüksek sınıfın korumalı bölümüne yerleştirmenin mümkün olup olmadığını ve tüm diğer sınıfların otomatik olarak miras aldığını bilmek istedim.İç içe geçmiş sınıfları C++'da koruyabilir misiniz?

+0

Bunu denemelisiniz! Bir kavram kanıtı ile gelmek çok zor görünmüyor ... – jpoh

cevap

8

"Inherit", C++ 'da kastetmediğiniz çok özel bir tanımı olduğu için kullanmak için yanlış bir sözcükdür, ancak evet bunu yapabilirsiniz. Bu yasaldır:

class A { 
    protected: 
    class Nested { }; 
}; 

class B : public A { 
    private: 
    Nested n; 
}; 

Ve A'da olmayan kod veya erişmek veya A :: İç içe başlatamazsınız A'dan türemiştir şey.

+0

Hmm B sınıfı, Nested n için bir erişimci yöntemi sağlıyorsa ne olur? Muhtemelen bir derleme hatası mı? – Kieveli

+0

Aslında, hayır. B yöntemlerini bildirirken, B sınıfı kapsamı içinde ad arama da olur. B kapsamında, A: Nested erişilebilir. Bu nedenle, A :: Nested & B :: Get_n() tamam. – MSalters

+1

Hm, haklısınız. A: İç içe geçme özelliği, B'nin ortak bir işlevden A: Yuvalanmış olarak döndüğünden erişilebilir. B hala somut olmayan bir durumdur, bu yüzden ilginç bir şekilde, arayanın B :: Get_n() dönüş değerini saklamasına izin verilmediği duruma yol açar. –

İlgili konular