2011-10-24 12 views

Respuesta

5

Clase local y Clase anidada son bestias diferentes.

A La clase anidada es una clase declarada dentro del alcance de otra clase.

A La clase local se declara dentro de una definición de función.

La clase interna es un término C++ no estándar, así que no estoy seguro de cómo definirlo.


clases anidadas:

Documentación de IBM como una buena documentación here.
Para resumir:

  • El nombre de una clase anidada es local en su clase envolvente. A menos que use punteros, referencias o nombres de objetos explícitos, las declaraciones en una clase anidada solo pueden usar construcciones visibles, incluidos nombres de tipos, miembros estáticos y enumeradores de la clase adjunta y las variables globales.
  • Las funciones miembro de una clase anidada siguen reglas de acceso regulares y no tienen privilegios de acceso especiales para los miembros de sus clases adjuntas. Las funciones miembro de la clase envolvente no tienen acceso especial a los miembros de una clase anidada

Clases locales:
Esta respuesta mío here documenta los puntos sutiles asociados con clases locales.

+1

Y no hay clases internas en C++. Ese es un concepto de Java. –

2

Citando proyecto de C++ 11 (N3290):

9.7 declaraciones de clases anidadas [class.nest]

1 Una clase puede ser declarado dentro de otra clase. Una clase declarada dentro de otra se llama clase anidada .

9.8 declaraciones de clase locales [class.local]

1 Una clase puede ser declarado dentro de una definición de función; tal clase se llama una clase local.

No existe el concepto de clase interna especificada en C++ estándar.

0

Las clases internas capturan la referencia this de la clase adjunta. Una jerarquía de instancias de clase interna forma una estructura de árbol. Esto es único para Java.

Cuestiones relacionadas