Variables static

Veamos un ejemplo>

# include <iostream.h>

class Ejemplo {
   int ejemplo1;
   static int ejemplo2;
public:
   Ejemplo (void);
   void print(void);
};

int Ejemplo :: ejemplo2;

Ejemplo :: Ejemplo (void)
{
   ejemplo1 = 1;
   ejemplo2 = 1;
}

void Ejemplo :: print (void)
{
ejemplo1++;
ejemplo2++;
cout << "ejemplo1 = " << ejemplo1 << '\n';
cout << "ejemplo2 = " << ejemplo2 << '\n'; ;
}

main()
{
   Ejemplo primero, segundo;
   primero.print();
   segundo.print();
}
La salida de este programa es:

ejemplo1 = 2
ejemplo2 = 2
ejemplo1 = 2
ejemplo2 = 3

Una variable declarada static (ejemplo2) es una variable externa y sólo puede existir una copia de esa variable. Todos los objetos de esta clase (en este caso, primero y segundo) comparten una misma copia de esta variable, que es global a estos objetos.
En la definición de clase, la variable sólo es declarada. La declaración dice que la variable existirá y le da un nombre, pero la definición es la que realmente define un lugar para guardarla en la memoria del ordenador. Por definición, una variable puede ser declarada en la header file, pero no definida allí, sino fuera de ella, normalmente en el fichero de implementación.
El constructor inicializa las dos variables internas a 1 cada vez que se crea un objeto. Para mostrar que ejemplo2 es compartida por todos los objetos de esta clase, definimos una función, print, que incrementa el valor de las variables internas y a continuación las imprime.

Free Web Hosting