static

Podemos declarar como static:

  • variables
  • variables miembro de clase
  • funciones
  • funciones miembro de clase
  • clases

Variables estáticas:
Una variable declarada static permanece durante toda la ejecución del programa. Si es declarada dentro de una función, la variable permanecerá aunque se salga de ella.

#include <iostream>

int miFuncion(int);
using namespace std;
int main(void)
{
      int i;
      for(i=0;i<=10;i++)
      {
            cout<<"Valor actual de la variable estatica: "<<miFuncion(i)<<endl;
      }
      return 0;
}

int miFuncion(int _i)
{
      static int valor;
      if(_i >=2)
            valor +=1;
      
      return valor;
}

La salida de este programa sería:

Valor actual de la variable estatica: 0
Valor actual de la variable estatica: 0
Valor actual de la variable estatica: 1
Valor actual de la variable estatica: 2
Valor actual de la variable estatica: 3
Valor actual de la variable estatica: 4
Valor actual de la variable estatica: 5
Valor actual de la variable estatica: 6
Valor actual de la variable estatica: 7
Valor actual de la variable estatica: 8
Valor actual de la variable estatica: 9

El valor guardado en la variable estática se mantine hasta que finaliza el programa.


Variables miembro de clase estáticas:
Al declarar una variable miembro como static, estará disponible para todas las instancias de esa clase, e incluso se podrá acceder a ella sin instanciar la clase.






//Programa principal
#include <iostream>
#include "miclase.h"

using namespace std;

int miClase::variable_estatica = 0;
int main(void)
{

    miClase ClaseNueva,OtraClase;
    ClaseNueva.variable_estatica = 10;
    cout<<"Valor actual de la variable static de miClase es "<<
           OtraClase.variable_estatica<<endl;


    return 0;

}

//Archivo miClase.cpp
#include "miclase.h"
miClase::miClase()
{
    otra_variable = 5;
}

//Archivo miClase.h
#ifndef MICLASE_H
#define MICLASE_H
class miClase
{
private:
    int otra_variable;
public:
    miClase();
    static int variable_estatica;
};
#endif // MICLASE_H

Si compilamos y ejecutamos este programa la salida sería:

Valor actual de la variable static de miClase es 10

Aunque estamos pidiendo el valor de la variable_estatica del objeto OtraClase, nos imprime 10, que es el valor que le asigna ClaseNueva a la variable. Solo existe una variable_estatica que es compartida por todos los objetos creados de la clase miClase.