Maison >développement back-end >C++ >Pourquoi les membres de données statiques nécessitent-ils une initialisation hors classe en C ?

Pourquoi les membres de données statiques nécessitent-ils une initialisation hors classe en C ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-11-04 19:23:01763parcourir

Why Do Static Data Members Require Out-of-Class Initialization in C  ?

Comprendre l'initialisation des membres de données statiques

Pourquoi l'initialisation hors classe pour les membres de données statiques ?

Dans la programmation orientée objet, les membres de données statiques , appelées variables de niveau classe, sont partagées entre toutes les instances d'une classe. Contrairement aux données membres classiques qui existent dans chaque objet, les données membres statiques existent en dehors de toute instance d'objet.

Pour garantir leur allocation d'adresse unique et cohérente, les données membres statiques nécessitent une définition unique et explicite dans le programme. Cette définition ne peut pas être placée dans la définition de classe car les définitions de classe sont généralement incluses dans plusieurs fichiers objets, ce qui entraîne des définitions en double potentielles. Par conséquent, les définitions de membres de données statiques doivent être déclarées séparément.

Déclaration par rapport à la définition et NSDMI

L'initialisation des membres de données non statiques (NSDMI) permet au programmeur de spécifier une valeur initiale pour les membres de données non statiques. données membres dans la définition de classe. Cependant, il s’agit simplement d’une initialisation et non d’une définition. La définition réelle d'un membre de données, qu'il soit statique ou non statique, se produit en dehors de la classe.

Allocation de mémoire et durée de vie

Les membres de données non statiques sont stockés dans les objets auxquels ils appartiennent. . Leur durée de vie commence avec le constructeur de l'objet. Les données membres statiques, en revanche, existent indépendamment des objets, résidant à une adresse fixe depuis le début du programme. De la mémoire leur est allouée au moment de la compilation.

Définir des membres de données statiques : un parallèle aux variables externes

Définir un membre de données statiques est similaire à déclarer une variable externe en C . Une déclaration de variable externe, telle que extern int i;, indique que la variable i est déclarée ailleurs dans le programme. De même, les données membres statiques sont déclarées dans la définition de la classe, mais leur définition est fournie séparément en utilisant une syntaxe telle que int X::i = 0;, où X est le nom de la classe et i est le membre de données statique.

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