C++ permite definir miembros de datos estáticos dentro de una clase utilizando la palabra clave estática . Cuando un miembro de datos se declara como estático, entonces debemos tener en cuenta la siguiente nota:
- Independientemente de la cantidad de objetos creados, solo se crea una única copia del miembro estático en la memoria.
- Todos los objetos de una clase comparten el miembro estático.
- Todos los miembros de datos estáticos se inician a cero cuando se crea el primer objeto de esa clase.
- Los miembros de datos estáticos son visibles solo dentro de la clase , pero su tiempo de vida es el programa completo.
Relevancia:
los miembros de datos estáticos generalmente se usan para mantener valores que son comunes para toda la clase. , por ejemplo, para realizar un seguimiento de cuántos objetos de una clase en particular se han creado.
Lugar de almacenamiento:
aunque los miembros de datos estáticos se declaran dentro de una clase, no se consideran parte de los objetos. En consecuencia, su declaración en la clase no se considera como su definición. Un miembro de datos estáticos se define fuera de la clase. Esto significa que aunque el miembro de datos estáticos se declare en el ámbito de la clase, su definición persiste en todo el archivo. Un miembro estático tiene ámbito de archivo. Sin embargo, dado que un miembro de datos estáticos se declara dentro de la clase, solo se puede acceder a ellos mediante el nombre de la clase y el operador de resolución de alcance.
A continuación se muestra el programa para ilustrar la asignación de memoria en miembros de datos estáticos y no estáticos :
Programa 1: para ilustrar miembros no estáticos
// C++ program to illustrate // non-static data members using namespace std; #include <iostream> // Class class GfG { private: // Created a variable int count = 0; public: // Member function to increment // value of count void set_count() { count++; } // Member function to access the // private members of this class void show_count() { // print the count variable cout << count << '\n'; } }; // Driver Code int main() { // Objects of class GfG GfG S1, S2, S3; // Set count variable to 1 // for each object S1.set_count(); S2.set_count(); S3.set_count(); // Function to display count // for each object S1.show_count(); S2.show_count(); S3.show_count(); return 0; }
1 1 1
A continuación se muestra la ilustración de la asignación de memoria para el programa anterior:
Explicación:
los tres objetos de la clase GfG S1, S2 y S3 comparten las funciones de miembro pero tienen una copia separada del recuento de miembros de datos. En main() , se llama explícitamente a set_count() para establecer el valor de count en 1. Ahora, cada objeto tiene el valor de su cuenta = 1.
Programa 2: para ilustrar miembros estáticos:
// C++ program to illustrate // non-static data members using namespace std; #include <iostream> // Class class GfG { private: // Created a static variable static int count; public: // Member function to increment // value of count void set_count() { count++; } // Member function to access the // private members of this class void show_count() { // print the count variable cout << count << '\n'; } }; int GfG::count = 0; // Driver Code int main() { // Objects of class GfG GfG S1, S2, S3; // Increment count variable // by 1 for each object S1.set_count(); S2.set_count(); S3.set_count(); // Function to display count // for each object S1.show_count(); S2.show_count(); S3.show_count(); return 0; }
3 3 3
A continuación se muestra la ilustración de la asignación de memoria para el programa anterior:
Explicación:
Los tres objetos de la clase GfG S1, S2 y S3 comparten las funciones de miembro, así como el miembro de datos estáticos. Solo existe una copia del miembro de datos estáticos en la memoria. No es necesario que una función establezca explícitamente el valor de recuento porque el valor de los miembros de datos estáticos se ha inicializado en 0 fuera de la definición de clase. Ahora, cada objeto incrementa el valor de conteo y, por lo tanto, la salida.
Nota: La memoria para funciones miembro y miembros de datos estáticos se asigna por clase y no por objeto. La clase muestra no tiene miembro de datos (excepto el recuento estático), pero esto no significa que no se asignará espacio de memoria a los objetos de Muestra. En tales casos, la memoria mínima se reserva para el objeto. Por lo tanto, el tamaño de S1, S2 y S3 es de 1 byte.
Publicación traducida automáticamente
Artículo escrito por aryadasburma y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA