void pointer -> Methode aufrufen
-
Hi
ich habe folgendes Problem:
ich soll mithilfe 1. arrays 3 verschiedene klassen dynamisch anlegen und steuern können.
Habe das auch mal grob probiert nur is das so ja quatsch. so müsste ich vor jedem methodenaufruf zig if's machen.Gibt es da nicht eine möglichkeit bei der ich direkt den Datentyp aus der klasse holen kann? bei java ging das irgendwie mit "return this;" und dann "bla.getClass();"
class Medium{} class Video: public Medium{} class Buch: public Medium{} int main() { void* ptr[100]; ... ´ case 'm': ptr[i] = new Medium(); i++; break; case 'b': ptr[i] = new Buch(); i++; break; case 'v': ptr[i] = new Video(); i++; break; ... // Hier beginnt der Part wo ich nicht weiter weiss string temp = ((Medium*)ptr[i-1])->getTyp(); if(temp=="Medium")((Medium*)ptr[i-1])->mediumAusgeben(); else if(temp=="Buch")((Buch*)ptr[i-1])->mediumAusgeben(); else if(temp=="Video")((Video*)ptr[i-1])->mediumAusgeben();
-
lass doch die void-pointer weg?
martinyyyy schrieb:
int main() { Medium* ptr[100]; ... ptr[i-1]->mediumAusgeben();
-
ja,,
hatte noch vergessen das sich die methoden überladen.
video->mediumAusgeben();
mach was anderes wie
medium->mediumAusgeben();und wenn dann alle den pointertypen "Medium" haben, wird erst die mediumAusgeben von Medium aufgerufen.
-
dann musst du die memberfunktionen als virtuell deklarieren, dann löppt dit.
-
ahhhh.. is ja einfach

danke
-
inheritance rulez schrieb:
memberfunktionen als virtuell deklarieren
Genau.
@martinyyyy: Das könnte dann so aussehen://main.cpp #include <iostream> class Medium { public: Medium() { } virtual ~Medium() { } virtual void mediumAusgeben() { std::cout << "Medium" << std::endl; } }; class Video: public Medium { public: Video(): Medium() { } virtual void mediumAusgeben() { std::cout << "Video" << std::endl; } }; class Buch: public Medium { public: Buch(): Medium() { } virtual void mediumAusgeben() { std::cout << "Buch" << std::endl; } }; int main() { Medium *ptr[3]; ptr[0] = new Medium; ptr[1] = new Video; ptr[2] = new Buch; // Ausgabe ptr[0]->mediumAusgeben(); ptr[1]->mediumAusgeben(); ptr[2]->mediumAusgeben(); // Speicher freigeben delete ptr[0]; delete ptr[1]; delete ptr[2]; return 0; }