Klasse in Klasse?
-
So kann man Hilfsklassen definieren die von aussen nicht benutzbar sind.
-
helper class schrieb:
So kann man Hilfsklassen definieren die von aussen nicht benutzbar sind.
aber sie ist doch public!
dann kann man sie doch von aussen verwenden!
-
ich habs mal bei meiner baumstruktur verwendet
aber die innere Klasse halt im private Bereich der aeuseren,meinst du sowas in der art? oder so dasdie Klasse im public Berreich untergebracht ist?
-
Kann mehrere Gründe haben, einige finden so etwas z.B. schöner anstatt dafür eine eigene headerdatei zu erstellen.
-
ist egal ,ob nun public oder private... war ja nur ein beispiel... wollte nur mal wissen, warum man soetwas macht, da man auch 2 eigenständige klassen machen kann ohne diese komische schachtelung... ich dachte, dass man das extra gemacht hat...
da ich noch ein "anfänger"(klammere ich mal besser ein) bin, kenne ich mich mit solchen "spezialitäten" noch nicht so gut aus...
-
Hallo,
eine andere Möglichkeit wäre Reference Counting:
private: // class representing string values struct StringValue: public RCObject { char *data; StringValue(const char *initValue); StringValue(const StringValue& rhs); void init(const char *initValue); ~StringValue(); };
Eine struct ist das gleiche wie eine class, nur dass bei einer struct default alles public ist.
Das komplette Beispiel gibts hier:
http://www.aristeia.com/BookErrata/M29Source_frames.htmlAls Anfänger möglicherweise nicht so leicht nachzuvollziehen, aber man wächst mit seinen Aufgaben.
-
so ein "anfänger" bin ich nun auch wieder nicht, dass ich nicht weiß, was ein struct ist...
den code von der seite verstehe ich auch... auch wenn ich manchmal nicht genau weiß, warum er sowas macht...ich habe ja noch ne menge zeit, "die feinheiten" von c++ zu lernen... die grundlagen(vererbung, mehrfachvererbung, operatorüberladung, templates, usw...) kann ich ja bereits... mir fehlt nur noch, wann man was für welches problem einsetzt... wenn ich fertigen code sehe, dann weiß ich was er macht, aber ich weiß nicht, ob ich selber auf so etwas (bestimmt) elegantes gekommen wäre... naja... muss wohl mehr übungen oder ein gutes buch suchen, indem man die anwendung der ganzen sachen lernt...
und thx für die antwort!
-
Ich denke hauptsächlich um die Zugehörigkeit zur Klasse deutlich zu machen. Ich kenne Keinen Fall wo man was das man mit einer Internen Klasse machen Kann nicht auch ohne hinkriegt, aber es ist halt übersichtlicher z.B. node in List zu definieren...
-
leech schrieb:
wollte nur mal wissen, warum man soetwas macht, da man auch 2 eigenständige klassen machen kann ohne diese komische schachtelung
Diese "komische schachtelung" nennt sich nested class.
-
Um auch auch ein Beispiel zu bringen,
wo private nested classes sinnvoll sind
(zumindestens denk ich so):class Derived; class Base { private: class Hidden { }; public: virtual Hidden overrideMe() = 0; friend class Derived; }; class Derived : public Base { public: virtual Hidden overrideMe() { cout << "mmm ... pie " << endl; } }; class WontCompileDerived : public Base { public: virtual Hidden overrideMe() // Error: 'class Base::Hidden is private { cout << "what the hell .. " << endl; } };
So kannst zum Beispiel auswählen welche Klassen eine Methode überschreiben
dürfen. Wenns noch dazu virtuelle Methoden sind, kannst sogar sicherstellen,
dass der Hierachie keine konkrete Klasse mehr hinzugefügt werden kann.
(wobei ich dann wohl das etwas sauberere boost:sealed verwenden würde)Gibt aber sicher bessere Beispiele dafür.