variable Parameterliste bei virtual Funktion

sisela

Erfahrenes Mitglied
Hallo,
ich habe eine Basisklasse mit einer virtuelle Funktion. Diese werden an alle Kindklassen vererbt. Das Problem ist, dass in den Kindklassen unterschiedlich viele Parameter für die Funktion übergeben werden sollen aber in der Basisklasse eine bestimmte Anzahl an Parametern festgelegt ist..

Wie kann man also an die virtuelle Basisklassenfunktion unterschiedlich lange Parameterlisten übergeben.

myObject:

Code:
CBasisklasse* myObject[10];
myObject[i] = new CKindKlasse(para1, para2);]

myObject[k]->setPara(para1, para2);

Basisklasse:

Code:
virtual void setPara();

Kindklassen:
Code:
void setPara(para1);
void setPara(para1, para2)


Das ergibt einen Fehler, weil ja in der basisklasse kein parameter angegeben ist.

Was kann man tun.
 
Erstens kannst Du mehrere Funktionen überlagern, zweitens kannst Du eventuell nicht benötigte Argumente mit default-Werten versehen. Die default-Werte gibst Du dann in der Basisklasse mit an und schon brauchst Du diese nicht mit einzutragen!
 
Ja danke...
max. Parameter in der Basisklasse und wenn nicht benötigt -> default.

Hätte man auch selber drauf kommen können.

Aber so ist das...
 
max. Parameter in der Basisklasse und wenn nicht benötigt -> default.
Pass bei den Defaultparametern auf, dass sie in abgeleiteten Klassen auch mit den selben Werten besetzt werden wie in der Basisklasse, sonst handelst du dir ein ziemliches Vererbungswirrwarr ein. Siehe dazu auch "Effektiv C++ programmieren", Scott Meyers, Kapitel 38.
 
Danke für den Hinweis. Ehrlich gesagt funktioniert das mit den Default Parametern ganz gut. Man darf alledings nicht vergessen in den Kindklassen, den Parameter, der eigentlich nicht gebraucht wird mit anzugeben und zu initialisieren.
Des Weiteren muss ich sagen, dass mir eine andere Methode nicht einfällt, wenn du eine elegantere kennst, nur her mit der Weisheit.

mfg
Christian
 
Genau, aufpassen mit dem Default-Parameter!

Das ist eine recht solide Lösung, also bleib mal dabei. Man könnte natürlich noch so Sachen machen wie zum Beispiel eine Parameter-Klassenhierarchie entwerfen und als Funktionsparameter nur Listen dieser Parameterobjekte übergeben, aber das wäre wohl ein Schritt in die falsche Richtung. :)
 
Das wäre eine Möglichkeit aber ich denke dass dies eher unübersichtlicher sein würde. Außerdem, wenn man erst mal eine Lösung hat, hat man meist keine Lust mehr für das gelöste Problem noch eine Lösung umsetzten.
Aber nichts desto trotz danke... und ich werde das nächste Mal darüber nachdenken.

mfg
 
Zurück