Heim  >  Artikel  >  Backend-Entwicklung  >  Technische Antworten Vorläufiges Verständnis von Objektorientierung (C++-Klasse)

Technische Antworten Vorläufiges Verständnis von Objektorientierung (C++-Klasse)

php是最好的语言
php是最好的语言Original
2018-07-23 15:58:401453Durchsuche

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.

Werden Mitgliedsvariablen und Mitgliedsfunktionen in C++-Klassenobjekten zusammen gespeichert? Wenn nicht?

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.


Wie verwaltet der C++-Compiler Klassen und Objekte? Wie unterscheidet der C++-Compiler konkret, welches Objekt welche Mitgliedsmethode aufruft?

Technische Antworten Vorläufiges Verständnis von Objektorientierung (C++-Klasse)
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.

Artikelübersicht

Wir müssen diese Probleme lösen:

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?


Sind Mitgliedsvariablen und Memberfunktionen in C++-Klassenobjekten zusammen gespeichert? Wenn nicht?

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.


Wie verwaltet der C++-Compiler Klassen und Objekte? Wie unterscheidet der C++-Compiler konkret, welches Objekt welche Mitgliedsmethode aufruft?

Technische Antworten Vorläufiges Verständnis von Objektorientierung (C++-Klasse) 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.

Verwandte Empfehlungen:

Objektorientierte abstrakte PHP-Klasse

Detaillierte Erklärung der objektorientierten PHP-Programmierung: Klassen und Objekte_PHP-Tutorial

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn