Udostępnij za pośrednictwem


Nazwy typu zagnieżdżonego

Microsoft C++ obsługuje deklaracji zagnieżdżonych typów — nazwanych i anonimowe.Anonimowe struktur i klasy są szczególne rozszerzenie Microsoft C++.Związki anonimowe są standardowe.

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

Uwagi

Pierwsza klasa nazwa powyżej odnosi się do klasy zewnętrzne; Druga odnosi się do klasy wewnętrznej.Nazwy te mogą dalej zagnieżdżone.W ten sposób,

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

są wszystkie prawidłowe nazwy klas.Zamiast nazwy klasy identyfikatorów szablonu może służyć, przy użyciu słowa kluczowego opcjonalne szablonu w

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

W niektórych sytuacjach programowania warto zdefiniować zagnieżdżonych typów.Te typy są widoczne tylko dla funkcji elementów członkowskich typu klasy, w której są zdefiniowane.One również były widoczne, tworząc kwalifikowana nazwa typu przy użyciu operatora zakres rozdzielczości (:).

[!UWAGA]

Jednej hierarchii powszechnie używane klasy, która zatrudnia zagnieżdżonych typów jest iostream.W plikach nagłówkowych iostream, definicji klasy ios zawiera serię Typy wyliczeniowe, które są pakowane do użytku tylko z biblioteki iostream.

Przykład

Poniższy przykład definiuje klas zagnieżdżonych:

// 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()
{
}

Aby dostęp nazwę zdefiniowaną w klasie zagnieżdżone, należy użyć operatora zakres rozdzielczości (:) do skonstruowania nazwy klasy kompletne.Użyj tego operatora jest wyświetlany w inicjowania z statyczne członków w poprzednim przykładzie.Aby użyć klasy zagnieżdżonych w programie, użyj kodu takich jak:

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

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

Zagnieżdżone anonimowe klasy lub struktury mogą być definiowane jako:

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

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

int main()
{
}

Klasa anonimowe musi być zagregowane nie funkcji elementów członkowskich i nie elementy statyczne.

KONIEC Microsoft szczególne

[!UWAGA]

Chociaż można zdefiniować typ wyliczany wewnątrz deklaracji klasy, odwrotnej nie jest prawdziwe; nie można zdefiniować typy klas wewnątrz deklaracji wyliczenia.

Zobacz też

Informacje

Specyfikatory typu C++