Deklaration mit Zuweisung?



  • ok, das es ne abstrakte Methode ist war ja klar aber was soll die = 0 nun bewirken?



  • Bedeutet das die Methode in der abgeleiteten Klassen zwingend überschrieben werden muss.



  • nein, war quatsch. sorry



  • man setzt die funktion auf 0 ... gibt dann kein {} teil



  • genauer gesagt, mit dem = 0 sagst du dem Compiler, das diese funktion funktion in dieser Klasse zwar deklariert, aber nicht definiert wird. Der compiler sucht dann nicht nach der definition, laesst aber dafuer auch keine Instanziierung der klasse zu.
    Ansonsten wuerde es unresolved symbole hageln, wenn du die klasse ubersetzt, und auf diese basismethode irgendwo zugegriffen wurde.
    abstrakte Methoden werden in c++ immer so dargestellt. Ohne dem =0 und mit (standard)definition waers nur virtuell.

    Ciao



  • genauer gesagt, mit dem = 0 sagst du dem Compiler, das diese funktion funktion in dieser Klasse zwar deklariert, aber nicht definiert wird.

    Das ist nicht korrekt. Das = 0 bedeutet "pure virtual". Eine Klasse mit mindestens einer solchen Methode ist *abstrakt* und kann nicht direkt instanziiert werden. Es bedeutet aber *nicht*, dass eine solche Methode keine Definition in der Klasse hat. Eine "pure virtual"-Methode kann ohne weiteres auch eine Definition besitzen. Das prominenteste Beispiel ist ein "pure virtual"-Destruktor, der sogar *immer* eine Definition haben *muss*.

    Die Definition einer solchen Methode wird aber niemals über dynamische Bindungn aufgerufen (praktisch gesehen landet ihr Eintrag nicht in der vtable). Eine solche Methode kann also nur direkt aufgerufen werden.



  • RHBaum schrieb:

    genauer gesagt, mit dem = 0 sagst du dem Compiler, das diese funktion funktion in dieser Klasse zwar deklariert, aber nicht definiert wird. Der compiler sucht dann nicht nach der definition

    Oh doch. Auch rein virtuelle Methoden können einen Körper haben.
    Sie zB: Destruktor



  • Na geh. Da will ich einmal Klugscheissern und komm zu spät 😞

    *schnüf*



  • vielen dank für Eure schnelle Hilfe. Also ist es egal ob ich nun die {} oder = 0 schreibe. quasi 2 Ausdrucksformen für ein und dasselbe na dann werd ich mal ein bischen abstrahieren 😉



  • Sprotti schrieb:

    Also ist es egal ob ich nun die {} oder = 0 schreibe. quasi 2 Ausdrucksformen für ein und dasselbe

    Nein, die =0 sagt "rein virtuell" und die {} definieren eine Funktion damit sich der Linker nicht ärgern muss, das ist keinesfalls das Gleiche!


Anmelden zum Antworten