2008-11-21 7 views
5

Ich habe eine Klasse, die wirklich nur von Klassen in einer bestimmten Klassenhierarchie benötigt wird. Ich wollte wissen, ob es möglich ist, die Klasse in den geschützten Bereich der höchsten Klasse zu verschachteln und alle anderen Klassen automatisch erben zu lassen?Können Sie verschachtelte Klassen in C++ schützen?

+0

Sie sollten es versuchen! Es scheint nicht zu schwierig, einen Proof of Concept zu finden ... – jpoh

Antwort

8

"Inherit" ist das falsche Wort zu verwenden, da es eine sehr spezifische Definition in C++ hat, die Sie nicht meinen, aber ja, Sie können das tun. Das ist legal:

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

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

Und Code, der nicht in A oder etwas ist, das von A ableitet kann ein :: Nested nicht zugreifen oder instanziiert.

+0

Hmm Was passiert, wenn Klasse B eine Accessor-Methode für Nested n bietet? Wahrscheinlich ein Kompilierfehler? – Kieveli

+0

Eigentlich nein. Bei der Deklaration von Methoden von B findet die Namenssuche auch im Bereich von Klasse B. Und in B-Bereich ist A :: Nested zugänglich. Daher ist A :: Nested & B :: Get_n() in Ordnung. – MSalters

+1

Hm, du hast Recht. A :: Nested ist zugänglich, da B ein A :: Nested von einer öffentlichen Funktion zurückgeben kann. B es ist immer noch nicht instanziierbar, so führt dies interessanterweise dazu, dass der Aufrufer den Rückgabewert von B :: Get_n() nicht speichern darf. –