T
Das in dem von mir gewählten Beispiel das Ersetzen der Nachricht
eigentlich sinnlos ist und dass die Art und Weise, wie die Nachricht
ersetzt wird, äußerst umständlich ist, ist mir schon bewusst.
Das die Nachricht mittels einer zusätzlichen Methode ersetzt wird,
war sogar beabsichtigt.
Worauf es mir in dem Beispiel ankam, war die Fähigkeit, im Konstruktor
einer Kindklasse TClass die Übergabeparameter für den Konstruktor der
Elternklasse TBaseClass zu bestimmen, mit evtl. sehr aufwändigen
Algorithmen, und diese Parameter an den Elternkonstruktor zu übergeben.
Bei folgendem Fall muss man sich ja keine weiteren Gedanken machen:
TClass::TClass() : TBaseClass(1)
{
//nix
}
Hier kann ich ja bereits beim Entwickeln genau fessetzen, mit welchem Parameter
der Elternkonstruktor versehen wird.
Oder ich lasse durch den Anwendungsentwickler festlegen, welcher Wert in
den Elternkonstruktor wandern soll:
TClass::TClass(int val) : TBaseClass(val)
{
//nix
}
==> nur falls der zu übergebende Parameter durch TClass festgesetzt werden soll,
der Anwendungsentwickler demzufolge keinen Einfluss auf den Wert besitzt, und
sich der Parameter nur mit einem vielleicht recht aufwändigen Algorithmus ermitteln lässt, nützen mir die oben genannten Ansätze natürlich nichts mehr!
Eine Lösung wäre, wie ich jetzt weiss, ja z.B. folgendes:
TClass::TClass() : TBaseClass(computeParam())
<param> TClass::computeParam()
{
//hier: Parameter berechnen
return(<param> );
}
Ist, aus meiner Sicht, natürlich etwas umständlich, für den Konstruktorenaufruf
eigene Methoden zu entwickeln. Darum kam ich zu dem Irrglauben, dass das Problem
auch folgendermaßen gelöst werden könnte:
TClass::TClass() //zuerst Standardkonstruktor von TBaseClass, der nichts macht
{
//hier: Parameter berechnen
TBaseClass::TBaseClass(<param> );
}
Und exakt das war mein Problem!
Grüße,
TS++
[ Dieser Beitrag wurde am 13.04.2003 um 14:14 Uhr von TS++ editiert. ]