frage zun virtual methode ...
-
habe folgendes prob., hoffe koennt helfen:
folgende klassen:
class A { virtual int foo(int x, int y=0){return x*y;} }; class B:A { int foo(int x){return x;} }; class C:A { int foo(int x, int y){return x+y;} };
Nun habe ich eine bestimmte programm-stelle in der es z.B. eine Liste mit A-Objekten gibt und fuer jede soll nun foo(int, int) aufgerufen werden.
Mein compiler meckert an dieser stelle schon (genauer bei einem B-Objekt).
Warum ist das so? Ist obiges moeglich?
Gruss.
-
Du solltest in der Abgl. Klasse auch virtual schreiben und B::foo zwei ints erwarten lassen...
-
Die Suche nach Überladungen wird nicht in den Basisklassen fortgesetzt, wenn eine Methode mit passendem Namen gefunden wird.
Es gibt B::foo, also wird A nicht mehr durchsucht. Mit virtual hat das nichts zu tun.Abhilfe:
class B:A { using A::foo; int foo(int x){return x;} };
-
ness schrieb:
Du solltest in der Abgl. Klasse auch virtual schreiben
Hat er doch.
peperony schrieb:
Mein compiler meckert an dieser stelle schon (genauer bei einem B-Objekt).
Beim nächsten mal auch das posten, was dein Compiler zu meckern hat.
Dein Problem ist einfach, wie ness schon sagte, dass B::foo nicht die gleiche Signatur wie A::foo hat. Du solltest das wie in C::foo dahingehend ändern.