Frage zur Vererbung unter C++
-
Hallo erstmal, ich hab schon ein paar Programme mit C# geschrieben und wollte nun auf C++ umsteigen, nun hat sich mir ein großes Problem aufgetan. Unter C# konnte man zum Beispiel so etwas coden:
class Mutter{ int m; } class Sohn : Mutter{ int s; } class Tochter : Mutter{ int t; } class Main(){ Mutter[] array = new Mutter[2]; array[0] = new Sohn(); array[1] = new Tochter(); for(int i = 0;i < 2;i++) if(array[i] is Sohn){ Sohn s = (Sohn)array[i]; //........Code für den Sohn }else if(array[i] is Tochter){ Tochter t = (Tochter)array[i]; //........Code für die Tochter } }Ich weiß das es auch foreach gibt und man das Eleganter lösen kann, aber darum gehts nich. Wie ihr seht geht es mir drum mehrere verscheidene Klassen(die alle von einer Klasse abgeleitet sind) in EIN Array zu packen und diese später wieder in die eigentlichen Klassen aufzuteilen. Geht dies auch unter C++??? Ich hab das leider noch nicht hinbekommen, aber ich hoffe mal das es hier im Forum einige begabte Coder gibt, die mir da weiter helfen können.
-
Das ist ein grundsätzlicher Unterschied von C# und C++. Mach dich mit Instanzen, Zeigern und Referenzen vertraut, dann weißt du warum es nicht so gehen kann.
-
Danke erstmal für die schnelle Antwort!Hast du ne Idee oder nen Ansatz, wie ich so etwas unter C++ lösen könnte, ohne für jede Klasse ein eigenes Array anzulegen??
-
Ja, das Konzept nennt sich in C++ Polymorphie. Du legst ein Array von Zeigern auf die Basisklasse an. Um dann etwas damit anfangen zu können, musst du virtuelle Funktionen kennen.
Das genaue Vorgehen solltest du vielleicht in einem Tutorial oder einem Buch nachsehen. Nur mit C# Kenntnissen wirst du in C++ wohl nicht weit kommen.
-
Danke für den Ratschlag, hab unter dem Begriff Polymorphie bei Google genau das gefunden was ich gesucht hab.
-
Hier nochmal der Link, für alle die das selbe Problem haben: http://cplus.kompf.de/artikel/poly.html
-
Wenn du das wirklich ernsthaft und nicht nur zum lernen verwenden willst, wäre ein Blick auf Boost.PointerContainer angebracht.