2010-12-19 14 views
21

Jeśli mam zagnieżdżone klasy tak:Zagnieżdżone klasy Definicja w pliku źródłowym

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

    // main class members here 
    }; 

Obecnie definicje MyClass są w pliku CPP ale definicje dla NestedClass są w pliku nagłówkowym, czyli Nie mogę zadeklarować funkcji/konstruktorów w pliku CPP.

Moje pytanie brzmi: jak zdefiniować funkcje NestedClass w pliku cpp? Jeśli nie mogę, jaki jest powód (a jeśli tak, to mam niejasne pojęcie, dlaczego tak się dzieje, ale chciałbym dobrego wyjaśnienia)? A co ze strukturami?

Odpowiedz

40

Możesz. Jeśli wewnętrzna klasa ma metody takie jak:

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

    // main class members here 
    }; 

... wtedy można zdefiniować go w pliku .cpp tak:

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

Struktury są prawie takie samo jak klas w C++ - po prostu domyślnie "public" dla ich dostępu. Są traktowane we wszystkich innych aspektach, podobnie jak klasy.

Ty może (jak wspomniano w komentarzach) po prostu zadeklarować klasę wewnętrzną, np

class MyClass { 
    class NestedClass; 
    // blah 
}; 

..i następnie zdefiniować go w pliku realizacji:

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

Co masz na myśli przez "nie ... jak inne wewnętrzne klasy"? –

+0

@Alf: gdzie napisałem "nie"? – sje397

+0

Przepraszam, moje oczy ewidentnie skrzyżowane lub coś. Wciąż zastanawiasz się, co masz na myśli przez ostatnie zdanie. Chodzi mi o to, że klasa wewnętrzna nie musi być zdefiniowana w zewnętrznej klasie (np. Opiera się na tym zwykły idiom PIMPL). I to wydaje się zaprzeczać temu, co piszesz w ostatnim zdaniu, więc prawdopodobnie masz na myśli coś innego niż to, co zostało napisane dosłownie? Pozdrawiam, –

Powiązane problemy