Virtual Methode



  • Hallo liebe C++ Fans,

    ich habe eine Frage bezüglich der virtual Methode, besser gesagt zu einem kleien Programmausschnitt...

    virtual void print() const
    { cout << "A-Nr: " <<getNr()<<endl;
    }

    was genau macht den das virtual vor der print-Methode?

    Danke schon mal für eure Antworten

    Gruß FFW-HANS



  • Das virtual für sich allein macht gar nichts - es bewirkt nur im Zusammenhang mit Vererbung, welche Version der Methode tatsächlich ausgeführt wird:

    class A
    {
    public:
      void print1()
      { cout<<"A::print1\n";}
      virtual void print2()
      { cout<<"A::print2\n";}
    };
    
    class B : public A
    {
    public:
       void print1()
      { cout<<"B::print1\n";}
      virtual void print2()
      { cout<<"B::print2\n";}
    };
    
    ...
    B obj;
    A* ref=&obj;
    
    ref.print1();//liefert "A::print1", weil ref ein A* ist
    ref.print2();//liefert "B::print2", weil ref tatsächlich auf ein B-Objekt zeigt
    


  • heißt das dann konkret, dass nicht der Zeiger die Methode bestimmt sondern das Objekt selbst??

    Gruß



  • ffw-hans schrieb:

    heißt das dann konkret, dass nicht der Zeiger die Methode bestimmt sondern das Objekt selbst??

    jop, das ist der Sinn der virtuellen vererbung



  • alles klar,

    danke für die Hilfe! 🙂



  • ffw-hans schrieb:

    heißt das dann konkret, dass nicht der Zeiger die Methode bestimmt sondern das Objekt selbst??

    Sag lieber es hängt vom dynamischem statt vom statischen Typ ab 😉



  • rüdiger schrieb:

    ffw-hans schrieb:

    heißt das dann konkret, dass nicht der Zeiger die Methode bestimmt sondern das Objekt selbst??

    jop, das ist der Sinn der virtuellen vererbung

    Mit virtueller Vererbung hat das ja garnix zu tun...


Anmelden zum Antworten