Definición de Clase anidada en el archivo fuente


Si tengo una clase anidada así:

  class MyClass
  {
    class NestedClass
    {
    public:
      // nested class members AND definitions here
    };

    // main class members here
  };

Actualmente, las definiciones de MyClass están en el archivo CPP pero las definiciones de NestedClass están en el archivo de encabezado, es decir, no puedo declarar las funciones/constructores en el archivo CPP.

Así que mi pregunta es, ¿cómo defino las funciones de NestedClass en el archivo cpp? Si no puedo, ¿cuál es la razón (y si este es el caso, tengo una vaga idea de por qué sucede esto, pero me gustaría una buena explicación)? ¿Qué hay de las estructuras?

Author: Peter A. Schneider, 2010-12-19

1 answers

Puedes. Si su clase interna tiene un método como:

  class MyClass   {
    class NestedClass
    {
    public:
      void someMethod();
    };

    // main class members here
  };

...a continuación, se puede definir en el .archivo cpp así:

void MyClass::NestedClass::someMethod() {
   // blah
}

Las estructuras son casi lo mismo que las clases en C++ - solo que por defecto son 'públicas' para su acceso. Son tratados en todos los demás aspectos como las clases.

Usted puede (como se indica en los comentarios) simplemente declarar una clase interna, por ejemplo:

class MyClass   {
    class NestedClass;
    // blah
};

..y luego definirlo en el archivo de implementación:

class MyClass::NestedClass {
  // etc.
};
 47
Author: sje397,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-08-11 18:19:46