Maison >développement back-end >C++ >Pourquoi les membres de données statiques nécessitent-ils une initialisation hors classe en C ?
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.
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.
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 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!