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.


Anmelden zum Antworten