Compartir a través de


Nombres de tipo anidado

Microsoft C++ admite la declaración de tipos anidados — denominado y anónimo.Los structs anónimos y las clases son una extensión específica de Microsoft de C++.Las uniones anónimas son estándar.

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

Comentarios

El primer nombre de clase anterior hace referencia a la clase externa; el segundo hace referencia a la clase interna.Estos nombres pueden anidarse adicional.así,

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

están los nombres válidos de clases.En lugar de nombres de clase, los identificadores de la plantilla se pueden usar, con la palabra clave opcional de la plantilla, como en

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

En algunas situaciones de programación, tiene sentido de definir tipos anidados.Estos tipos son visibles sólo a las funciones miembro de tipo de clase en que están definidas.También se pueden crear visible construyendo un nombre de tipo calificado mediante el operador de resolución de ámbito (::).

[!NOTA]

Una jerarquía de clases de uso general que usan tipos anidados es iostream.En los archivos de encabezado iostream, la definición de la clase IOS incluye una serie de tipos de lista, que se empaquetan se utiliza exclusivamente con la biblioteca iostream.

Ejemplo

el ejemplo siguiente define clases anidadas:

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

Para tener acceso a un nombre definido en una clase anidada, use el operador de resolución de ámbito (::) para construir un nombre de clase completo.el uso de este operador se muestra en las inicializaciones de los miembros de Estática en el ejemplo anterior.Para utilizar una clase anidada del programa, utilice el código como:

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

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

Las clases anónimas anidados o estructuras pueden definirse como:

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

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

int main()
{
}

Una clase anónima debe ser un agregado que no tiene ninguna función miembro y ningún miembro estático.

Específico de Microsoft de FINAL

[!NOTA]

Aunque un tipo enumerado puede definirse en una declaración de clase, el inverso no es true; los tipos de clase no pueden ser declaraciones interiores definido de la enumeración.

Vea también

Referencia

Especificadores de tipo de C++