Klassen im

Hallo,

ich würde gerne zur Laufzeit unterschiedliche Klassen, die jedoch von derselben Basis- Klasse abgeleitet wurden, global laden. Auf die geladene Klasse sollen dann diverse Methoden mit einer, in jeder Klasse unterschiedlich überladenen Funktion, zugreifen. Wie stelle ich das am besten an?
Hier mein (nicht funktionierendes Testbeispiel):

class Test{
void method(){ //do sth}
};

class Derived1:stuck_out_tongue:ublic Test{
void method(){ //do sth else}
};

class Derived2:stuck_out_tongue:ublic Test{
void method(){ //do sth diffrent}
};

Test *t;

doMethod(){t.method();}

void main(param x)
{
if(x){t=new Derived1();}
else {t=new Derived2();}

doMethod();
}

Vielleicht hat jemand eine Idee?

Torsten

Hallo,

wenn ich das richtig verstanden habe ist alles, was du tun musst, die Methode in der Klasse, von der abgeleitet wird, als „virtual“ deklarieren, dann wird automatisch das richtige gemacht.

Grüße,
Moritz

Hi Moritz,

den Gedanken hatte ich auch schon. Aber virtual sagt nur aus, dass die Funktion der abgeleiteten Klasse gestartet wird , wenn die Funktion der Basisklasse aufgerufen wird.

Ich möchte jedoch die Instanz der Klasse „überschreiben“.

Torsten

Hallo

den Gedanken hatte ich auch schon. Aber virtual sagt nur aus,
dass die Funktion der abgeleiteten Klasse gestartet wird ,
wenn die Funktion der Basisklasse aufgerufen wird.
Ich möchte jedoch die Instanz der Klasse „überschreiben“.

Was soll das bedeuten: die Instanz der Klasse
„überschreiben“
?

Was Moritz meinte, ist sowas:

#include 

 class Basis {
 public:
 virtual void method() { std::cout method(); }

 void setMethod(int x)
{
 switch(x) {
 case 1: delete t; t=new Derived1; break;
 case 2: delete t; t=new Derived2; break;
 default: break;
 }
}

 void main()
{
 setMethod(2);
 doMethod();

 setMethod(1);
 doMethod();
}

Was genau sollte denn anders sein oder funktionieren?

Grüße

CMБ

Hi,

das funktioniert so wie ich es wollte. Ich hatte wohl irgend einen Fehler in meinem Programm. Genauso hatte ich es schon probiert.

Danke,
Torsten