Vererbung und überschreiben von Methoden
Verfasst: 3. Januar 2013 16:59
Hallo zusammen!
Folgendes Problem:
Ich habe eine Klasse "Spieler" und z.B. die Klassen "LokalerSpieler", "Netzwerkspieler" und "AiSpieler", welche alle von der Klasse "Spieler" abgeleitet sind. Also folgender Code:
Die Klasse "Netzwerkspieler" soll beim Aufruf der Methode "nextRound()" etwas anderes tun, als die anderen beiden, weshalb ich die Methode hier überschrieben habe.
Führe ich nun folgenden Code aus, funktioniert das auch wunderbar:
Da es aber nicht notwendigerweise nur 3 Spieler sind, will ich es mir etwas einfacher machen und die Objekte in einem QList-Element speichern:
Das Problem hierbei ist aber, dass beim Netzwerkspieler-Objekt die Methode der Spieler-Klasse ausgeführt wird, vermutlich weil es eben auch über einen Pointer der Klasse "Spieler" angesteuert wird.
Gibt es hier eine Möglichkeit dennoch die Methode der jeweiligen Kindklasse auszuführen?
Danke schonmal für Eure Hilfe!
Gruß,
Ted
Folgendes Problem:
Ich habe eine Klasse "Spieler" und z.B. die Klassen "LokalerSpieler", "Netzwerkspieler" und "AiSpieler", welche alle von der Klasse "Spieler" abgeleitet sind. Also folgender Code:
Code: Alles auswählen
class Spieler {
public:
Spieler();
void nextRound();
protected:
int runde;
};
class LokalerSpieler : public Spieler {
public:
Player();
};
class Netzwerkspieler : public Spieler {
public:
Netzwerkspieler();
void nextRound();
};
class AiSpieler : public Spieler {
public:
AiSpieler();
};
Führe ich nun folgenden Code aus, funktioniert das auch wunderbar:
Code: Alles auswählen
LokalerSpieler *lokal = new LokalerSpieler;
Netzwerkspieler *nw = new Netzwerkspieler;
AiSpieler *ai = new AiSpieler;
lokal->nextRound();
nw->nextRound();
ai->nextRound();
Code: Alles auswählen
LokalerSpieler *lokal = new LokalerSpieler;
Netzwerkspieler *nw = new Netzwerkspieler;
AiSpieler *ai = new AiSpieler;
QList<Spieler*> spielerliste;
spielerliste.append(lokal);
spielerliste.append(nw);
spielerliste.append(ai);
foreach(Spieler *spieler, spielerliste) {
spieler->nextRound();
}
Gibt es hier eine Möglichkeit dennoch die Methode der jeweiligen Kindklasse auszuführen?
Danke schonmal für Eure Hilfe!
Gruß,
Ted