ich komm grad einfach nicht drauf…
wenn ich Klassen haben, die alle die gleichen Methoden haben, wie setze ich mal diese, mal jene ein
Ich hab mir schonw as überlegt in der Art:
void\* klasse;
if (soundso)
{
klasse = new Klasse1();
}
else
{
klasse = new Klasse2();
}
klasse-\>tuWas();
allerdings frag ich mich grad ob ich dann nicht unweigerlich Probleme beim „delete klasse;“ kriege. Der Compiler weiss ja nicht, was er da jetzt freigeben soll.
Wie macht man sowas?
Es kann ja kaum das hier die gute Lösung sein (wenn sie überhaupt funktioniert):
Das is doch auch sowas ähnliches wie function-pointer im C oder? das hab ich auch noch nie so ganz verstanden, wie man das macht, könnt ihr mir das grad auch noch schnell erklären , danke
kannst Du so etwas nicht irgendwie umgehen? Ist meiner Meinung
nach kein sauberes Design eines Programms.
Sollte doch prinzipiell auch mit Hilfe einer abstrakten
Basisklasse realisierbar sein.
Äh ja ok, ich kann von mir aus auch noch eine Klasse schreiben von der die beiden abgeleitet sind… machts das einfacher?
Erstelle ein Basisklasse, von dann die anderen abgeleitet
werden. Die gemeinsam genutzten Funktionen sind als virtuelle
Funktionen zu erstellen. Wenn Du dann einen Zeiger auf eine
abgeleitete Klasse hast, weiß der Compiler, welche der Methoden
er aufrufen muß. Das gleiche gilt für den delete Operator.
Die gemeinsam genutzten Funktionen sind als virtuelle
Funktionen zu erstellen.
Hi,
das sollten dann aber keine kleinen Schnipsel sein, die dann massenhaft in Schleifen o.ä. aufgerufen werden. (elementweise Operationen auf Vektoren oder ähnliches). Das wird elend langsam. Für sowas sollte man das Design neu überdenken.
Hi
Ich experimentiere schon länger mit dem, was du „variable Klassen“ nennst. Versuch’s doch mal so:
void* klasse = NULL;
klasse = realloc( klasse,sizeof( klasse_1 ) );
…dann
klasse_1* Zeiger = ( klasse_1* )klasse;
…und dann
Zeiger -> TuWas();
…und wenn du es wieder freigeben willst:
klasse = realloc( klasse,0 );
Funktioniert recht gut!
Außerdem finde ich, daß das ein wirklich geniales Programmdesign ist und die Standardtechniken bei weitem übertrifft. Mit Hilfe dieser Grundlage kann man in weiterführenden System ganz neue Programmlogiken aufbauen, die sich wesentlich effizienter programmieren und verwalten lassen.
Hi
Ich experimentiere schon länger mit dem, was du „variable
Klassen“ nennst. Versuch’s doch mal so:
void* klasse = NULL;
klasse = realloc( klasse,sizeof( klasse_1 ) );
…dann
klasse_1* Zeiger = ( klasse_1* )klasse;
…und dann
Zeiger -> TuWas();
…und wenn du es wieder freigeben willst:
klasse = realloc( klasse,0 );
Funktioniert recht gut!
Außerdem finde ich, daß das ein wirklich geniales
Programmdesign ist und die Standardtechniken bei weitem
übertrifft.
Aua,
das ist extrem schlechter Programmierstil, da Du damit die Typüberprüfung, die in C++ eingebaut ist, und einen Vorteil zu C darstellt, vollständig ausschaltest. Wenn Du sowas überhaupt benutzt, dann nur, wenn es wirklich notwendig ist und dann auch gut gekapselt, damit Fehler in diesem „gesetzlosen“ Gebiet sehr schnell eingegrenzt werden können.
Aua,
das ist extrem schlechter Programmierstil, da Du damit die
Typüberprüfung, die in C++ eingebaut ist, und einen Vorteil zu
C darstellt, vollständig ausschaltest. Wenn Du sowas überhaupt
benutzt, dann nur, wenn es wirklich notwendig ist und dann
auch gut gekapselt, damit Fehler in diesem „gesetzlosen“
Gebiet sehr schnell eingegrenzt werden können.
…da hast du was falsch verstanden, glaube ich: Das, was ich da an Quelltext geschrieben habe, ist sozusagen nur das Vorgeplänkel. Du benutzt nämlich dann im eigentlichen Rest des Programms, wenn du die allokierten Variablen nutzen willst, den Nicht - void - Zeiger, der auf dieselbe Adresse wie der void Zeiger zeigt.
Der Vorteil in diesem Stil liegt darin, daß man über nur einen Zeiger ( void* ) eine ganze „Allokationsstruktur“ bauen kann. Der Vorteil ist nicht gleich einsehbar: Man ist dadurch in der Lage ausgesprochen dynamisch zu programmieren. Z.B. ist man in der Lage eine Dateiverarbeitung zu schreiben, die sofort mit allen Typen, egal wie dynamisch sie gebaut sind, sofort fertig zu werden, ohne das man noch größeren Programmieraufwand hätte.