... STL container....
-
moin zusammen,
weiß jemand von euch wie man inner subclass zu nem STL container die maxSize überschreibt und konstant setzt? ich dachte mir, ne initfkt zu schreiben, die das macht und diesen wert dann nicht mehr ändern zu können.Grüßle
EvilEpsilon
-
STL Container lassen sich nicht ableiten und somit auch nicht die Methoden überschreiben.
-
Hallo
Ganz dumme Frage: Warum lassen Sie sich denn nicht ableiten? Was soll das?
chrische
-
Weil sie keine virtuellen Destructoren haben, und das gibt nur ärger.
-
Hallo
STL Pro schrieb:
Weil sie keine virtuellen Destructoren haben, und das gibt nur ärger.
Das war mir schon klar, aber warum haben Sie keine virtuellen Destruktoren? Das wurde ja wohl sicher nicht einfach vergessen, sondern das war ja bestimmt Absicht und genau diese Intention wüsste ich gerne.
chrische
-
Weil die STL nicht objektorientiert ist? Schau dir mal die STL an: da gibts keine Ableitungen! In der STL wurde viel über Templates und Adapter (z.B. Iteratoren) gelöst, um Polymorphie zu umgehen.
Wenn du jetzt ableitest, umgehst du das STL-Konzept. Weil wenn du einen eigenen Vector machen willst, fragt man sich, warum du dann nicht passend eine Iterator baust?
Das was du machen kannst (wenn du unbedingt ableitein willst), ist deine Klasse nicht vererben, sondern mit dem Container implementieren:
class MyClass : private std::vector<typename T> { public: using std::vector<T>::size; // oder so ähnlich... };MIt dem Using kannst du die nötigen Methoden wieder sichtbar machen, die durch die private "Ableitung" versteckt sind.
-
Hallo
Ich will ja gar nicht ableiten, weil ich bisher das einfach noch für nötig gehalten habe. Danke für die Antwort.
chrische
-
Ein Object, dessen Klasse virtuelle Methoden hat benötigt noch die vtable und somit mehr Speicher zur Laufzeit.
Vielleicht wurde auch deswegen bei der STL auf Ableitung verzichtet, man will ja performante Container haben.
-
Artchi schrieb:
Weil die STL nicht objektorientiert ist? Schau dir mal die STL an: da gibts keine Ableitungen! In der STL wurde viel über Templates und Adapter (z.B. Iteratoren) gelöst, um Polymorphie zu umgehen.
Eh? Inwiefern ist die STL nicht objektorientiert?

-
finix schrieb:
Artchi schrieb:
Weil die STL nicht objektorientiert ist? ...
Eh? Inwiefern ist die STL nicht objektorientiert?

Also ich finde die Aussage auch "gewagt" (sehr vorsichtig ausgedrückt).
Bloß weil sie Compilzeitpolymorphie (via templates) der Laufzeitpolymorphie (via vtables) vorzieht ?
Sorry, aber das halte ich für Unsinn. Die STL hat alle Kennzeichen von OO (Kapselung von Daten und Methoden, Spezialisierung, Polymorphie,...) und ist es auch.
Natürlich bilden die Algorithmen da eine Ausnahme, aber die sind nunmal per se schonmal nicht objektorientiert....
Klingt ein wenig nach der Javaistenmär, C++ sei nicht OO, weil man Funktionen nicht in Klassen verpacken muss.Gruß,
Simon2.