Freigeben über


Deklarationen der geschachtelten Klasse

Eine Klasse kann im Rahmen einer anderen Klasse deklariert werden.Eine solche Klasse wird als „geschachtelte Klasse“. Geschachtelte Klassen werden berücksichtigt, im Kontext des einschließenden Klasse, sind für die Verwendung innerhalb dieses Bereichs verfügbar.Um eine geschachtelte Klasse von einem Bereich außer den unmittelbaren einschließenden Bereich zuzugreifen, müssen Sie einen vollqualifizierten Namen verwenden.

Im folgenden Beispiel wird gezeigt, wie geschachtelte Klassen deklariert:

// nested_class_declarations.cpp
class BufferedIO
{
public:
   enum IOError { None, Access, General };

   // Declare nested class BufferedInput.
   class BufferedInput
   {
   public:
      int read();
      int good()
      {
         return _inputerror == None;
      }
   private:
       IOError _inputerror;
   };

   // Declare nested class BufferedOutput.
   class BufferedOutput
   {
      // Member list
   };
};

int main()
{
}

BufferedIO::BufferedInput und BufferedIO::BufferedOutput werden innerhalb BufferedIOdeklariert.Diese Klassennamen sind nicht außerhalb des Gültigkeitsbereichs der Klasse BufferedIOsichtbar.Es enthält ein Objekt des Typs BufferedIO keine Objekte von Typen BufferedInput oder BufferedOutput.

Geschachtelte Klassen können Namen, Typ, den Namen der statischen Member und Enumeratoren nur im einschließenden Klasse direkt verwenden.Um Namen anderer Klassenmember zu verwenden, müssen Sie Verweise, Zeiger oder Objektnamen verwendet werden.

Im vorherigen BufferedIO Beispiel kann die Enumeration IOError direkt von Memberfunktionen in den geschachtelten Klassen, BufferedIO::BufferedInput oder BufferedIO::BufferedOutputFunktion gezeigt, wie in goodzugegriffen werden.

HinweisHinweis

Geschachtelte Klassen deklarieren nur Typen innerhalb des Klassengültigkeitsbereichs.Sie führen nicht enthaltene Objekte der geschachtelten Klasse erstellt wird.Im vorherigen Beispiel deklariert zwei geschachtelte Klassen deklariert jedoch keine Objekte dieser Klassentypen.

Eine Ausnahme von der Bereich sichtbarkeit einer Deklaration der geschachtelten Klasse ist, wenn ein Typname zusammen mit einer Vorwärtsdeklaration deklariert ist.In diesem Fall ist der Klassenname, der von der Vorwärtsdeklaration deklariert ist, außerhalb des einschließenden Klasse sichtbar, wenn der Bereich definiert ist, um die kleinste einschließende Bereich nicht Klasse.Beispiele:

// nested_class_declarations_2.cpp
class C
{
public:
    typedef class U u_t; // class U visible outside class C scope
    typedef class V {} v_t; // class V not visible outside class C
};

int main()
{
    // okay, forward declaration used above so file scope is used
    U* pu;

    // error, type name only exists in class C scope
    u_t* pu2; // C2065

    // error, class defined above so class C scope
    V* pv; // C2065

    // okay, fully qualified name
    C::V* pv2;
}

Siehe auch

Referenz

Klassen, Strukturen und Unions