Freigeben über


Namen des geschachtelten Typs

Microsoft C++ unterstützt Deklaration von geschachtelten Typen. anonyme und benannte —Anonyme Strukturen und Klassen sind eine bestimmte Erweiterung Microsoft C++.Anonyme Unions sind Standard.

[::] class-name :: class-name
[::] template-id :: class-name
[::] class-name :: template-id
[::] template-id :: template template-id
:: template template-id :: template template-id

Hinweise

Der erste obige Klassenname verweist die äußere Klasse an. Das zweite verweist auf die innere - Klasse.Diese Namen werden geschachtelt werden.Dadurch

Outer::Inner
::Outer::Inner
::Outer::Inner::Inner2

sind alle gültigen Namen von Klassen.Anstatt die Klassennamen Vorlagen werden kann, mit dem optionalen Bezeichner Schlüsselwort verwendet als in Vorlagen

MyClass<int>::Inner
Outer<int>::template Inner<int>

In bestimmten Situationen ist es sinnvoll, Programmierelement geschachtelte Typen zu definieren.Diese Typen sind nur für Memberfunktionen des Klassentyps sichtbar, in der sie definiert sind.Sie können sichtbar gemacht werden auch mithilfe eines qualifizierten Typnamen mithilfe des Bereichsauflösungsoperators (::) erstellen.

HinweisHinweis

Eine häufig verwendete Klassenhierarchie, die geschachtelte Typen einsetzt, ist iostream.In den iostream Headerdateien enthält die Definition der Klasse IOS eine Reihe von Enumerationstypen, die nur für die Verwendung mit der iostream Bibliothek gepackt werden.

Beispiel

Im folgenden Beispiel wird geschachtelte Klassen:

// nested_type_names1.cpp
class WinSystem
{
public:
   class Window
   {
   public:
      Window();   // Default constructor.
      ~Window();   // Destructor.
      int NumberOf();   // Number of objects of class.        
      int Count();   // Count number of objects of class.
   private:
      static int CCount;
   };

   class CommPort
   {
   public:
      CommPort();   // Default constructor.
      ~CommPort();   // Destructor.
      int NumberOf();   // Number of objects of class.
      int Count();   // Count number of objects of class.
   private:
      static int CCount;
   };
};

// Initialize WinSystem static members.
int WinSystem::Window::CCount = 0;
int WinSystem::CommPort::CCount = 0;

int main()
{
}

Um einen Namen zuzugreifen, der in einer geschachtelten Klasse definiert ist, verwenden Sie den Bereichsauflösungsoperator (::), um einen vollständigen Klassennamen zu erstellen.Verwendung dieses Operators wird in den Initialisierungen der static-Member im vorherigen Beispiel gezeigt.So fügen Sie eine geschachtelte Klasse im Programm verwenden, verwenden Sie Code, beispielsweise:

WinSystem::Window Desktop;
WinSystem::Window AppWindow;

cout << "Number of active windows: " << Desktop.Count() << "\n";

Geschachtelte anonyme Klassen oder Strukturen können z. B. definiert sind:

// nested_type_names2.cpp
class Ledger
{
   class
   {
   public:
      double PayableAmt;
      unsigned PayableDays;
   } Payables;

   class
   {
   public:
      double RecvableAmt;
      unsigned RecvableDays;
   } Receivables;
};

int main()
{
}

Eine anonyme Klasse muss ein Aggregat sein, das keine Memberfunktionen und keine statischen Member.

Microsoft ENDES bestimmten

HinweisHinweis

Obwohl ein Aufzählungstyp innerhalb einer Klassendeklaration definiert werden kann, ist die Umkehrung nicht erfüllt. Klassentypen können Deklarationen nicht in der Enumeration definiert sind.

Siehe auch

Referenz

C++-Typspezifizierer