C++ Funktionen überschreiben und Gültgkeit



  • Hallo,

    ich habe wohl ein Verständisproblem beim Überschreiben von Funktionen in C++.

    Beispiel :

    class a {
    public
      virtual void Test();
      void CallProc() {Test()};
    }
    
    class b : public a{
    public
      virtual void Test();
    }
    
    b* NewB = new b();
    
    b->CallProc();
    

    b->CallProc();
    ruft immer a::Test() auf und nicht b::Test(); wie ich es erwarten würde.

    Was mache ich falsch?!
    Danke.

    Gruß
    NewOne



  • ne das stimmt schon so (von den zahlreichen flüchtigkeitsfehler in deinem listing abgesehen): http://ideone.com/YD4Uug



  • Danke für die Info.

    Ich habe nicht den Code kopiert, sondern nur das Prinzip skizziert. 😉

    Gibt es denn eine plausible Erklärung, warum es so nicht funktionieren könnte?
    (andere Deklaration falsch, etc.)

    Gruß



  • ja, wenn die beiden funktionen nicht identisch sind (parameter, constness) oder wenn du virtual vergessen hast.



  • Ja. Entweder ist Test nicht als virtual deklariert oder du hast kein Objekt vom Typ B erzeugt, sodnern nur das Basisobjekt.

    Zeig lieber mal den Originalcode.



  • NewOne schrieb:

    Gibt es denn eine plausible Erklärung, warum es so nicht funktionieren könnte?

    da musst du uns erstmal den nicht funktionierenden Code zeigen. In deinem Beispiel klappt es ja.

    Meine Glaskugel sagt, dass eventuell eine Methode const ist, die andere nicht.

    Vergleiche mal ganz genau die Signaturen.



  • Möglicherweise möchtest du override benutzen, dann sagt dir der Compiler warum es nicht klappt.


Log in to reply