2010-12-19 15 views
21

Si tengo una clase anidada de este modo:Definición anidado clase de archivo de origen

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

    // main class members here 
    }; 

Actualmente, las definiciones de MyClass se encuentran en el archivo CPP pero las definiciones de NestedClass se encuentran en el archivo de cabecera, es decir, No puedo declarar las funciones/constructores en el archivo CPP.

Así que mi pregunta es, ¿cómo definir las funciones de NestedClass en el archivo CPP? Si no puedo, ¿cuál es el motivo (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?

Respuesta

40

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

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

    // main class members here 
    }; 

... entonces se puede definir en el archivo .cpp de este modo:

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

Las estructuras son casi lo mismo que las clases en C++ - solo de forma predeterminada a 'público' para su acceso. Son tratados en todos los demás aspectos como clases.

Usted puede (como se señala en los comentarios) acaba de declarar una clase interna, por ejemplo:

class MyClass { 
    class NestedClass; 
    // blah 
}; 

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

class MyClass::NestedClass { 
    // etc. 
}; 
+0

¿Qué quiere decir por "no ... como otras clases internas"? –

+0

@Alf: ¿dónde escribí 'no'? – sje397

+0

Lo siento, mis ojos evidentemente se cruzaron o algo así. Sin embargo, todavía te preguntas qué quieres decir con la última frase. Quiero decir, una clase interna no necesita definirse dentro de la clase externa (por ejemplo, la expresión idiomática PIMPL común se basa en eso). Y eso aparentemente contradice lo que escribes en la última oración, ¿entonces posiblemente te refieres a algo más de lo que está literalmente escrito? Cheers, –

Cuestiones relacionadas