Ich war durch eine article von Don Clugston auf Codeproject. Es ist ein schöner Artikel und ist ziemlich berühmt. Im folgenden Code-Schnipsel, fand ich eine bestimmte Vorstellung sehr schwer zu begreifen:Funktion Pointer
class A {
public:
virtual int Afunc() { return 2; };
};
class B {
public:
int Bfunc() { return 3; };
};
// C is a single inheritance class, derives only from A
class C: public A {
public:
int Cfunc() { return 4; };
};
// D uses multiple inheritance
class D: public A, public B {
public:
int Dfunc() { return 5; };
};
Das Snippet durch folgenden Absatz folgt:
Angenommen, erstellen wir ein Mitglied Funktionszeiger für die Klasse C Diese Beispiel, Afunc und Cfunc sind beide Mitgliedsfunktionen von C, so dass unser Mitglied Funktionszeiger auf Afunc oder Cfunc zeigen kann. Aber Afunc benötigt einen This-Zeiger, der auf C :: A (was ich Athis nenne), zeigt, während Cfunc einen This-Zeiger benötigt, der auf C zeigt (was ich Cthis nennen werde). Compiler Writer befassen sich mit dieser Situation durch einen Trick: Sie sicherstellen, dass A zu Beginn von C physisch gespeichert ist. Dies bedeutet, dass Athis == Cthis. Wir haben nur einen, über den wir uns Sorgen machen müssen, und alles ist gut, mit der Welt.
Das einzige, was ich verstehen will, ist die Zeile in BOLD und ITALICS im obigen Absatz.
Ich verstehe nicht vollständig Afunc einen Zeiger auf C benötigt :: A während CFunc einen Zeiger auf C benötigt ganz natürlich ist.
Jede Hilfe wäre willkommen.
Könnten Sie bitte den letzten Satz umformulieren? – msiyer
@msiyer Ich habe versucht, weitere Informationen hinzuzufügen, hoffentlich ist dies ein bisschen klarer. –
Das ist eine großartige Erklärung. Ich bin Diplom-Ingenieur und habe daher keine CS-Kurse belegt. Ich mache es jetzt alleine. Lernen Sie alles, was erforderlich ist, um im Compiler-Design und -Konstruieren fundiert zu sein. Mit Antworten wie diesen mag man die formale Bildung von CS nicht wirklich vermissen. Danke Konrad. – msiyer