Der Compiler-Verarbeitungsmechanismus für Attribute und Methoden
Klasse in C++ geht von der objektorientierten Theorie aus und definiert gemeinsam Variablen (Eigenschaften) und Funktionen (Methoden), um die Art der realen Welt zu beschreiben. Aus Computersicht besteht ein Programm immer noch aus Datensegmenten und Codesegmenten.
Wie vollzieht der C++-Compiler die Umwandlung der objektorientierten Theorie in Computerprogramme?
Mit anderen Worten: Wie verwaltet der C++-Compiler die Beziehung zwischen Klassen, Objekten, Klassen und Objekten?
Konkret: Bestimmte Objekte rufen Methoden in der Klasse auf. Wie geht das? Unterscheiden Sie, welche bestimmte Klasse diese Methode aufruft?
1) Mitgliedsvariablen und Mitgliedsfunktionen in C++-Klassenobjekten werden separat gespeichert
Mitgliedsvariablen:
Gewöhnliche Mitgliedsvariablen: gespeichert in Objekten, mit dem gleichen Speicherlayout und der gleichen Byteausrichtung wie Strukturvariablen
Statische Mitgliedsvariablen: im globalen Datenbereich gespeichert
Mitgliedsfunktionen: im Codeausschnitt gespeichert.
Es stellt sich die Frage: Viele Objekte teilen sich ein Stück Code? Wie unterscheidet der Code bestimmte Objekte?
Mit anderen Worten: int getK() const { return k }, wie unterscheidet der Code die spezifischen k-Werte von obj1-, obj2- und obj3-Objekten?
Die linke Seite ist die Implementierung der C++-Klasse und die rechte Seite ist die entsprechende zugrunde liegende Implementierung.
Zusammenfassung:
1. Mitgliedsvariablen und Mitgliedsfunktionen in C++-Klassenobjekten werden separat gespeichert. Das Vier-Regionen-Speichermodell in C-Sprache funktioniert immer noch!
2. Gewöhnliche Memberfunktionen von Klassen in C++ enthalten implizit einen this-Zeiger, der auf das aktuelle Objekt zeigt.
3. Statische Mitgliedsfunktionen und Mitgliedsvariablen gehören zu Klassen
Der Unterschied zwischen statischen Mitgliedsfunktionen und gewöhnlichen Mitgliedsfunktionen
Statische Mitgliedsfunktionen enthalten keine Zeiger auf bestimmte Objekte
Gewöhnliche Mitgliedsfunktionen enthalten einen Zeiger auf ein bestimmtes Objekt
Erweiterung:
Denken: Die Mitgliedsfunktionen einer Klasse können durch const geändert werden.
void const get(int a,intb)//类的成员函数 { this->a=100;//错误 this->b=200;//错误 }
Gemäß der obigen Analyse ist die interne Implementierung
void get (const Test *This,int a,int b)
Daher ändert const den Speicherplatz, auf den verwiesen wird durch diesen Zeiger.
Das Obige ist die sechste Zusammenfassung der C++-Überprüfungspunkte – der Verarbeitungsmechanismus des Compilers für Attribute und Methoden. Weitere verwandte Inhalte finden Sie auf der chinesischen PHP-Website (m.sbmmt.com)!