2010-12-19 3 views
21

Wenn ich eine verschachtelte Klasse wie so haben:Nested Class Definition in Quelldatei

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

    // main class members here 
    }; 

Derzeit sind die Definitionen von MyClass sind in der CPP Datei aber die Definitionen für NestedClass sind in der Header-Datei, das heißt, Ich kann die Funktionen/Konstruktoren in der Datei CPP nicht deklarieren.

Also meine Frage ist, wie definiere ich die Funktionen von NestedClass in der cpp-Datei? Wenn ich nicht kann, was ist der Grund (und wenn das der Fall ist, habe ich eine vage Vorstellung davon, warum das passiert, aber ich hätte gerne eine gute Erklärung)? Was ist mit Strukturen?

Antwort

40

Sie können. Wenn Ihre innere Klasse eine Methode, wie hat:

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

    // main class members here 
    }; 

... dann können Sie es in der CPP-Datei definiert werden wie folgt:

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

Strukturen fast die gleichen wie Klassen in C++ sind - nur für den Zugriff auf "öffentlich". Sie werden in allen anderen Aspekten genauso behandelt wie Klassen.

Sie kann (wie in den Kommentaren angegeben) nur eine innere Klasse deklariert, zum Beispiel:

class MyClass { 
    class NestedClass; 
    // blah 
}; 

..und dann in der Implementierungsdatei definiert es:

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

Was meinst du von "nicht ... wie andere innere Klassen"? –

+0

@Alf: wo habe ich 'nicht' geschrieben? – sje397

+0

Sorry, meine Augen sind offensichtlich gekreuzt oder so. Ich frage mich immer noch, was du mit dem letzten Satz meinst. Ich meine, eine innere Klasse muss nicht innerhalb der äußeren Klasse definiert werden (z. B. hängt das gewöhnliche PIMPL-Idiom davon ab). Und das widerspricht scheinbar dem, was Sie im letzten Satz geschrieben haben, also meinen Sie vielleicht etwas anderes als das, was buchstäblich geschrieben steht? Prost, –