Ich habe eine Warteschlange, die Objekte der Klasse Event enthält.Funktion Polymorphismus mit Referenz-Datentyp
std::priority_queue<Event> events;
Aber Ereignis ist nur eine Oberklasse von tatsächlichen Ereignissen. Nehmen wir an, wir folgende Klassen:
class Event{
public:
void Action(){
std::cout<<"do nothing"<<std::endl;
}
};
class XEvent : public Event{
public:
void Action(){
std::cout<<"do x"<<std::endl;
}
class YEvent : public Event{
public:
void Action(){
std::cout<<"do y"<<std::endl;
}
};
und in der Hauptfunktion:
int main(){
std::vector<Event> events;
events.push_back(XEvent x);
events.push_back(YEvent y);
Event e = events[0];
e.Action();
}
Ich möchte e.Action nach überschriebene Version verhalten. (d. H. "Mache x").
Aber stattdessen gibt mir die Ausgabe "nichts tun". Irgendwelche Vorschläge?
p.s. Ich suche tatsächlich nach einer Möglichkeit, dies zu tun, ohne Zeiger zu verwenden
Lesen Sie mehr über Aufschneiden. Der Vektor sollte 'std :: vector> Ereignisse sein;' eher. –