Heim >Backend-Entwicklung >C#.Net-Tutorial >Technische Antworten Vorläufiges Verständnis von Objektorientierung (C++-Klasse)
Wir sollten wissen, dass C++ zwei Arten von Mitgliedsdaten hat: statisch, nostatisch; drei Arten von Mitgliedsfunktionen: statisch, nostatisch, virtuell. Tatsächlich gibt es bei gewöhnlichen Memberfunktionen einen This-Zeiger im Parameter. Dieser Zeiger zeigt tatsächlich über diesen Zeiger auf das Objekt selbst. Der C++-Compiler weiß, welches Objekt die Mitgliedsfunktion der Klasse aufruft.
Wir sollten wissen, dass C++ zwei Arten von Mitgliedsdaten hat: statisch, nostatisch; drei Arten von Mitgliedsfunktionen: statisch, nostatisch, virtuell.
Sehen Sie sich diesen Fall unten an:
class A { int a; int b; };class B { int a; int b; static int c; };class C { int a; int b; static int c;public: void func() {} static void pg() {} };int main() { //1. 分析A对象占的内存 A a; cout << sizeof(a) << endl; //结果是8 //2. 分析B对象占的内存 B b; cout << sizeof(b) << endl; //结果是8 //3. 分析C对象占的内存 C c; cout << sizeof(c) << endl; //结果是8 return 0; }
Tatsächlich ziehen wir auf der Grundlage der Ausgabeergebnisse die folgenden Schlussfolgerungen:
a. Mitgliedsvariablen:
Gewöhnliche Member-Variablen werden in Objekten gespeichert und haben das gleiche Speicherlayout und die gleiche Byte-Ausrichtung wie Strutc-Variablen
Statische Member-Variablen werden im globalen Datenbereich gespeichert
b. Mitgliedsfunktionen werden in Codesegmenten gespeichert.
Tatsächlich gibt es für gewöhnliche Memberfunktionen (keine statischen Memberfunktionen) einen This-Zeiger im Parameter. Dieser Zeiger zeigt tatsächlich über diesen Zeiger auf das Objekt selbst. Der C++-Compiler weiß, welches Objekt die Mitgliedsfunktion der Klasse aufruft.
Fassen wir zusammen:
a. Mitgliedsvariablen und Mitgliedsfunktionen in C++-Klassenobjekten werden separat gespeichert;
b Gewöhnliche Mitgliedsfunktionen von C++-Klassen (einschließlich Konstruktoren, aber (ausgenommen statische Mitglieder). Funktionen) enthalten alle einen Zeiger, der auf das aktuelle Objekt zeigt.
c Statische Mitgliedsfunktionen und normale Mitgliedsfunktionen:
Statische Memberfunktionen enthalten keinen Zeiger, der auf ein bestimmtes Objekt zeigt, während normale Memberfunktionen einen Zeiger enthalten, der auf ein bestimmtes Objekt zeigt.
a. Werden Mitgliedsvariablen und Mitgliedsfunktionen in C++-Klassenobjekten zusammen gespeichert? Wenn nicht?
b. Wie verwaltet der C++-Compiler Klassen und Objekte? Wie unterscheidet der C++-Compiler, welches spezifische Objekt welche Mitgliedsmethode aufruft?
Sehen Sie sich diesen Fall unten an:
class A { int a; int b; };class B { int a; int b; static int c; };class C { int a; int b; static int c;public: void func() {} static void pg() {} };int main() { //1. 分析A对象占的内存 A a; cout << sizeof(a) << endl; //结果是8 //2. 分析B对象占的内存 B b; cout << sizeof(b) << endl; //结果是8 //3. 分析C对象占的内存 C c; cout << sizeof(c) << endl; //结果是8 return 0; }Tatsächlich ziehen wir auf der Grundlage der Ausgabeergebnisse die folgenden Schlussfolgerungen:
a. Mitgliedsvariablen:
Tatsächlich gibt es für gewöhnliche Memberfunktionen (keine statischen Memberfunktionen) einen This-Zeiger im Parameter. Dieser Zeiger zeigt tatsächlich über diesen Zeiger auf das Objekt selbst. Der C++-Compiler weiß, welches Objekt die Mitgliedsfunktion der Klasse aufruft.
a. Mitgliedsvariablen und Mitgliedsfunktionen in C++-Klassenobjekten werden separat gespeichert;
b Gewöhnliche Mitgliedsfunktionen von C++-Klassen (einschließlich Konstruktoren, aber (ausgenommen statische Mitglieder). Funktionen) enthalten alle einen Zeiger, der auf das aktuelle Objekt zeigt.
c Statische Mitgliedsfunktionen und normale Mitgliedsfunktionen:
Statische Memberfunktionen enthalten keinen Zeiger, der auf ein bestimmtes Objekt zeigt, während normale Memberfunktionen einen Zeiger enthalten, der auf ein bestimmtes Objekt zeigt.
Verwandte Empfehlungen:
Das obige ist der detaillierte Inhalt vonTechnische Antworten Vorläufiges Verständnis von Objektorientierung (C++-Klasse). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!