rein virtuelle Methoden
-
Hey Leute,
eine Frage, wenn man eine Memberfunktion A::foo() "=0" setzt, also:
class A { /* ... */ public: /* ... */ virtual void foo() = 0; }bewirkt dies dann intern, dass der Funktionszeiger "foo" auf null gesetzt wird oder wie wird damit intern verfahren?
Gruß

-
Polymorphie ist überlicherweise nicht über Funktionspointer implementiert. Aber jetzt überleg mal: Wenn der Zeiger auf 0 gesetzt würde, woher weiß das Programm dann welche Funktion es aufrufen soll?

-
MatheStein schrieb:
bewirkt dies dann intern, dass der Funktionszeiger "foo" auf null gesetzt wird oder wie wird damit intern verfahren?
Das ist dem Compilerbauer überlassen.
-
Alles, was Du dazu wissen musst ist, dass Du damit aus A eine abstrakte Klasse machst. Objekte mit A als dynamischen Typ kannst Du also nicht anlegen. Deswegen ist Deine Frage auch nicht so interessant ... fast sogar irrelevant.

-
Virtuelle Funktionen werden gewöhnlich mit vtables (-> google) implementiert. Da man keine Instanz einer abstrakten Klasse erstellen kann, braucht so eine Klasse auch keinen vtable. Im Normalfall sollte daher gar kein function pointer existieren, der auf null gesetzt werden könnte.
-
GorbGorb schrieb:
Virtuelle Funktionen werden gewöhnlich mit vtables (-> google) implementiert. Da man keine Instanz einer abstrakten Klasse erstellen kann, braucht so eine Klasse auch keinen vtable. Im Normalfall sollte daher gar kein function pointer existieren, der auf null gesetzt werden könnte.
Türlich, der Pointer in der Vtable ist auf 0.