virtual



  • Hi 🙂

    Ich hab da so eine seltsame Klasse im Buch:

    template <typename T>
    class Knoten {
       public:
          virtual ~Knoten() {}
          virtual Knoten* einfuegen(T* d) = 0;
          virtual void anzeigen() = 0;
    };
    

    Da hätt ich 2 Fragen dazu:

    1. was bedeuten diese "virtual"?
    2. was bedeutet das "= 0"?

  • Mod

    Das steht bestimmt auch in dem Buch.



  • Zu virtual gibts tatsächlich was im Buch. Allerdings in einem anderen Zusammenhang. Auch gibts was, wo hinter der Methodendeklaration noch eine Zuweisung steht, aber keine 0 (sondern "delete"). 😞



  • virtual bedeutet, dass die methode (eine member-funktion) in abgeleiteten klassen für dynamische bindung freigegeben wird. somit kann man sie sozusagen überschreiben.

    = 0 bedeutet bei virtuellen funktionen, dass noch keine implementierung vorhanden ist sondern nur die schnittstelle vorgegeben ist. diese funktionen nennt man pure virtual functions. klassen die mindestens eine rein virtuelle funktion haben ( virtual ... = 0; ) nennt man abstrakte klassen. abstrakte klassen sind nicht instanziierbar. man kann die rein virtuellen funktionen in abgeleiteten klassen durch normale virtuelle funktionen "überschreiben". (besser gesagt implementieren)

    edit: aber eigentlich hat camper recht. wenn ich seinen post im voraus gesehen hätte, hätte ich auch nicht geantwortet.

    edit 2: darf ich fragen wie das buch heisst? kann ich mir kaum vorstellen dass ein buch sprachmittel in einem listing benutzt und dann nicht ausführt.



  • tröröö schrieb:

    Zu virtual gibts tatsächlich was im Buch. Allerdings in einem anderen Zusammenhang.

    Es gibt zwei mögliche Zusammenhänge: virtuelle Funktionen und virtuelle Basisklassen. Du interessierst dich für ersteres, und dazu steht unter Garantie was in deinem Buch. Virtuelle Basisklassen sind etwas sehr obskures, das man nur sehr sehr selten braucht, das kannst du erstmal überlesen.

    Auch gibts was, wo hinter der Methodendeklaration noch eine Zuweisung steht, aber keine 0 (sondern "delete"). 😞

    Die =0 gehört ja auch zu virtual, da steht dann auch was darüber.



  • darf ich fragen wie das buch heisst?

    Das heißt "Grundkurs C++" von Galileo Computing, Autor Jürgen Wolf, ISBN 978-3-8362-2294-5
    Das ist mit C++11

    Cool wärs gewesen, wenn beim Buch auch gleich eine PDF-Datei mit dabei wäre. Dann könnt man leicht suchen.



  • tröröö schrieb:

    darf ich fragen wie das buch heisst?

    Das heißt "Grundkurs C++" von Galileo Computing, Autor Jürgen Wolf, ISBN 978-3-8362-2294-5
    Das ist mit C++11

    ahhhhhh hahaha, das erklärts! müssen wieder nachhilfe für wolf-geschädigte spielen, ist ja schön.



  • tröröö schrieb:

    darf ich fragen wie das buch heisst?

    Das heißt "Grundkurs C++" von Galileo Computing, Autor Jürgen Wolf, ISBN 978-3-8362-2294-5
    Das ist mit C++11

    NEIHHHHN! Der böse Wolf macht C++11 und versiebt es schon wieder!



  • OHJE. Hab ich so ein schlechtes Buch erwischt? 😮



  • tröröö schrieb:

    OHJE. Hab ich so ein schlechtes Buch erwischt? 😮

    es hat nichtmal die bezeichnung buch verdient. aber gleich kommen eh die anonymen wolf-verteidiger mit namen würgen jolf und kritisieren mich aufs schärfste und loben den autor in den himmel. 🙄

    was ich damit sagen möchte: ja das buch ist schlecht, damit lernst du kein anständiges c++. kauf dir "die c++ programmiersprache". meiner meinung nach das beste buch für etwa deinen kenntnisstand.


  • Mod

    asfdlol schrieb:

    aber gleich kommen eh die anonymen wolf-verteidiger

    SeppJ ist nicht anonym geblieben, als er diese Referenz schrieb: http://www.c-plusplus.net/forum/309715



  • Ich such grad bei Galileo in dem Buch rum... auf Seite 201 erzählt er was von dem Funktionsattribut virtual, das er erst im Abschnitt 9.4 "Virtuelle Vererbung" erklären wird. Mir schwant ja übles. Ich finde tatsächlich nichts über virtuelle Funktionen?! 😕 Kann das jemand bestätigen?



  • Ich finde tatsächlich nichts über virtuelle Funktionen?!

    Suchst auch grad auf http://www.galileocomputing.de/katalog/buecher/titel/gp/titelID-3339?GalileoSession=28877277A6ZLo8xRjiA#buchscanner rum?

    Wenn man dort in der Volltextsuche "virtual" eingibt, kommen 5 Treffer.

    Auf der Seite 353 findet sich das Beispiel, das ich hier reingepostet habe.
    Seite 201 - muss ich gestehen - habe ich Kapitel 5.4 nicht verstanden. Ist das damit vielleicht gemeint?



  • Arcoth schrieb:

    asfdlol schrieb:

    aber gleich kommen eh die anonymen wolf-verteidiger

    SeppJ ist nicht anonym geblieben, als er diese Referenz schrieb: http://www.c-plusplus.net/forum/309715

    das hätte man doch eher volkard überlassen sollen.



  • tröröö schrieb:

    Ich finde tatsächlich nichts über virtuelle Funktionen?!

    Suchst auch grad auf http://www.galileocomputing.de/katalog/buecher/titel/gp/titelID-3339?GalileoSession=28877277A6ZLo8xRjiA#buchscanner rum?

    Wenn man dort in der Volltextsuche "virtual" eingibt, kommen 5 Treffer.

    Genau. Hab auch nach "virtuelle" gesucht. Insgesamt nichts über virtuelle Funktionen 😮

    Seite 201 - muss ich gestehen - habe ich Kapitel 5.4 nicht verstanden. Ist das damit vielleicht gemeint?

    Da gibts auch nicht viel zu verstehen, er erwähnt nur die Schlüsselwörter virtual und explicit und sagt, dass er sie später erklären wird. (Was er dann für virtual nicht tut.)


  • Mod

    asfdlol schrieb:

    Arcoth schrieb:

    asfdlol schrieb:

    aber gleich kommen eh die anonymen wolf-verteidiger

    SeppJ ist nicht anonym geblieben, als er diese Referenz schrieb: http://www.c-plusplus.net/forum/309715

    das hätte man doch eher volkard überlassen sollen.

    Wozu?



  • Arcoth schrieb:

    asfdlol schrieb:

    Arcoth schrieb:

    asfdlol schrieb:

    aber gleich kommen eh die anonymen wolf-verteidiger

    SeppJ ist nicht anonym geblieben, als er diese Referenz schrieb: http://www.c-plusplus.net/forum/309715

    das hätte man doch eher volkard überlassen sollen.

    Wozu?

    er hätte die referenz bestimmt ehrlicher geschrieben, so wie ich das mal in einer diskussion hier aufgeschnappt habe.



  • virtual bedeutet, dass die methode (eine member-funktion) in abgeleiteten klassen für dynamische bindung freigegeben wird. somit kann man sie sozusagen überschreiben.

    = 0 bedeutet bei virtuellen funktionen, dass noch keine implementierung vorhanden ist sondern nur die schnittstelle vorgegeben ist. diese funktionen nennt man pure virtual functions. klassen die mindestens eine rein virtuelle funktion haben (virtual ... = 0;) nennt man abstrakte klassen. abstrakte klassen sind nicht instanziierbar. man kann die rein virtuellen funktionen in abgeleiteten klassen durch normale virtuelle funktionen "überschreiben". (besser gesagt implementieren)

    Ok, habe ich alles verstanden, danke. Damit wäre meine Frage eigentlich schon beantwortet 🙂



  • asfdlol schrieb:

    er hätte die referenz bestimmt ehrlicher geschrieben, so wie ich das mal in einer diskussion hier aufgeschnappt habe.

    Ich hatte nicht das Gefühl, daß Marc++us ehrliche Worte veröffentlicht hätte, darum beteiligte ich mich daran nicht.


Anmelden zum Antworten