Maison  >  Article  >  développement back-end  >  Réponses techniques Compréhension préliminaire de l'orientation objet (classe C++)

Réponses techniques Compréhension préliminaire de l'orientation objet (classe C++)

php是最好的语言
php是最好的语言original
2018-07-23 15:58:401453parcourir

Nous devons savoir que le C++ a deux types de données membres : statiques, nostatiques ; trois types de fonctions membres : statiques, nostatiques, virtuelles. En fait, pour les fonctions membres ordinaires, il y a un pointeur this dans le paramètre. Ce pointeur pointe en fait vers l'objet lui-même, via ce pointeur. Le compilateur C++ saura quel objet appelle la fonction membre de la classe.

Les variables membres et les fonctions membres dans les objets de classe C++ sont-elles stockées ensemble ? Sinon?

Nous devons savoir que le C++ a deux types de données membres : statiques, nostatiques ; trois types de fonctions membres : statiques, nostatiques, virtuelles.
Regardez ce cas ci-dessous :

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;
}

En fait, sur la base des résultats de sortie, nous tirons les conclusions suivantes :
a. Variables membres :

  • Normal Les variables membres sont stockées dans l'objet et ont la même disposition de mémoire et le même alignement d'octets que les variables strutc

  • les variables membres statiques sont stockées dans la zone de données globales

b. Les fonctions membres sont stockées dans des segments de code.


Comment le compilateur C++ gère-t-il les classes et les objets ? Plus précisément, les objets appellent des méthodes dans les classes. Comment le compilateur C++ distingue-t-il quel objet spécifique appelle quelle méthode membre ?

Réponses techniques Compréhension préliminaire de lorientation objet (classe C++)
En fait, pour les fonctions membres ordinaires (et non les fonctions membres statiques), il y a un pointeur this dans le paramètre. Ce pointeur pointe en fait vers l'objet lui-même, via ce pointeur. Le compilateur C++ saura quel objet appelle la fonction membre de la classe.


Résumons :
a. Les variables membres et les fonctions membres dans les objets de classe C++ sont stockées séparément
b. fonctions) contiennent toutes un pointeur this pointant vers l'objet actuel ;
c. Les fonctions membres statiques et les variables membres statiques appartiennent à des classes
d. Les fonctions membres statiques ne contiennent pas de pointeur this pointant vers un objet spécifique, tandis que les fonctions membres ordinaires contiennent un pointeur pointant vers un objet spécifique.

Présentation de l'article

Nous devons résoudre ces problèmes :

a. Les variables membres et les fonctions membres dans les objets de classe C++ sont-elles stockées ensemble ? Sinon?
b. Comment le compilateur C++ gère-t-il les classes et les objets ? Plus précisément, les objets appellent des méthodes dans les classes. Comment le compilateur C++ distingue-t-il quel objet spécifique appelle quelle méthode membre ?


Les variables membres sont-elles et fonctions membres dans les objets de classe C++ stockés ensemble ? Sinon?

Nous devons savoir que le C++ a deux types de données membres : statiques, nostatiques ; trois types de fonctions membres : statiques, nostatiques, virtuelles.

Regardez ce cas ci-dessous :

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;
}
En fait, sur la base des résultats de sortie, nous tirons les conclusions suivantes :

a. Variables membres :

  • Normal Les variables membres sont stockées dans l'objet et ont la même disposition de mémoire et le même alignement d'octets que les variables strutc

  • les variables membres statiques sont stockées dans la zone de données globales

b. Les fonctions membres sont stockées dans des segments de code.


Comment le compilateur C++ gère-t-il les classes et les objets ? Plus précisément, les objets appellent des méthodes dans les classes. Comment le compilateur C++ distingue-t-il quel objet spécifique appelle quelle méthode membre ?

Réponses techniques Compréhension préliminaire de lorientation objet (classe C++) En fait, pour les fonctions membres ordinaires (et non les fonctions membres statiques), il y a un pointeur this dans le paramètre. Ce pointeur pointe en fait vers l'objet lui-même, via ce pointeur. Le compilateur C++ saura quel objet appelle la fonction membre de la classe.


Résumons :

a. Les variables membres et les fonctions membres dans les objets de classe C++ sont stockées séparément
b. fonctions) contiennent toutes un pointeur this pointant vers l'objet actuel ;
c. Les fonctions membres statiques et les variables membres statiques appartiennent à des classes
d. Les fonctions membres statiques ne contiennent pas de pointeur this pointant vers un objet spécifique, tandis que les fonctions membres ordinaires contiennent un pointeur pointant vers un objet spécifique.

Recommandations associées :

Classe abstraite orientée objet PHP

Explication détaillée de la programmation orientée objet PHP : classes et objets_Tutoriel PHP

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn