You are on page 1of 1

Trucos informáticos

Informática en la vida real


Subscribe to feed Inicio Acerca del autor Lista de artículos

BUSCAR EN EL BLOG
Como usar static en C y C++
5 diciembre 2010 in C++ | Tags: C, C++, static
Search
Introducción
SUSCRIPCIÓN
Igual como la palabra clave const, el modificador static trae confusiones
Escribe tu dirección de correo porque se puede utilizar en varios contextos en C y C++. Podemos declarar
electrónico para suscribirte a estáticas funciones y métodos. Variables pueden estar estáticas dentro de
este blog, y recibir
notificaciones de nuevos funciones, métodos, clases y a nivel global, es decir, por todas partes.
mensajes por correo.
Variables estáticas locales
Únete a otros 51 seguidores
Lo más común es declarar una variable local estática:
Introduce tu email void mi_funcion_o_metodo(void)
{
Regístrame static int var_estatica = 4;
}
CONTACTAR AUTOR
El valor de la variable var_estatica no se pierde aunque ya no se
Envía un mensaje al autor encuentre dentro del alcance, es decir, cuando el programa haya salido de la
función en que la variable fue definida. Esto diferencia una variable estática de
POSTS MÁS VISTOS una variable no estática, cuyo valor se pierde al final de la función.

Cómo usar #include en C y C++ Debido a esta diferencia, las variables estaticas no se guardan en el stack sino
Como usar static en C y C++ en una memoria especial para variables estáticas. Aunque no sean accesibles
Como usar const en C++ durante toda la ejecución del programa, las variables estáticas existen
durante toda la ejecución del programa.
Centrado de tablas en HTML
Tooltips en HTML Igual como en el caso de las variables convencionales, se llama al constructor
Diccionario de verbos de las variables estáticas cuando se construyen. Esto succede una vez antes
Programación orientado a de llamar a la función main. Igualmente se llama una vez al destructor después
objetos en C de salir del programa. Recuerda que las variables estáticas existen durante toda
Punteros a funciones la ejecución del programa. Por eso deben inicalizarse antes de entrar y después
de salir de la función principal.
Obtener un múltiple SELECT en
PHP
No hay diferencia entre variables estáticas en funciones y métodos de clases. De
Conexión a una base de datos hecho, una variable estática se puede definir dentro de cualquier bloque
Firebird desde PHP
delimitado por {}.
Privacy & Cookies: This site uses cookies. By continuing to use this website, you agree to their use.
ÚLTIMAS ENTRADAS Cerrar y aceptar
Miembros
To find out more, including how to estáticos
control cookies, de una
see here: clase
Cookie Policy Seguir
Para qué sirve volatile en C++
Variables miembros de una clase también pueden ser estáticas. Una variable
Para qué sirve mutable en C++
estática de una clase es un dato común a todas las instancias de esta
Cast y conversión de tipos clase y accesible en todos los métodos. Una variable miembro estática es
en C++
incluso accesible sin instancia alguna.
Como esconder datos con git
Declaración de no privacidad En el código siguiente definimos una clase con una variable miembro estática:

CATEGORÍAS class MiClase


{
Aplicaciones de apoyo (11) public:
static int mi_variable;
Base de datos (5) };
C++ (23)
Esta variable se inicializa así:
C-Sharp (1)
Código bonito (13) int MiClase::mi_variable = 5;

Conceptos (4) Si la queremos usar sin instancia, entonces usamos el nombre cualificado:
Documentación (6)
void haz_algo(void)
HTML (3) {
Humor y desperación (10) MiClase::miVariable = 3;
}
Java (2)
Optimización de programas (6) Lógicamente, la variable miembro debe ser pública para que la podamos usar
Organiziación de trabajo (9) fuera de los métodos de la clase. (Dentro de los métodos de la clase no hace
falta poner el nombre de la clase delante.)
PHP (5)
Programas por placer (2) Las variables miembros estáticas existen también durante toda la ejecución del
Seguridad informática (7) programa. Su diferencia con las variables estáticas definidas en una función o
Sobre este blog (3) método está en su alcance: Las variables miembros están al alcance de todos los
métodos de una clase y no sólo de uno.
Trampas (3)
Trucos (26) Constantes estáticas
Variables estáticas se pueden declarar también const. Una constante estática
#define acentos ampliar STL
es una constante universal del programa, pero de alcance limitado. Es una
array multidimensional backup
buena práctica utilizar constantes estáticas en lugar de macros #define ya que
base de datos C
C++ Ciencia científico
las constantes llevan un tipo: un 5 puede ser un int, un char o un float pero
un dato
comentarios const
const-correctness constantes const static int var = 5;
en C const_iterator contenedor
contraseña control de siempre es un int.
versiones crear proyectos
css código abierto Deque Métodos estáticos
documentación Métodos de clases también pueden ser estáticas. Declarar un método estático
donación de tiempo de cálculo
es una promesa que este método sólo utiliza miembros estáticos de la
doxygen empleo enum
estilo de clase. Este tipo de método no conoce el puntero this, por lo cual no se puede

programación hacer directamente referencia a métodos y variables no estátitocs de la clase.


Firebird FlameRobin 1 class MiClase
formas de trabajar 2 {
función git
funciones largas 3 public:
4 // Una variable estática
HTML HTML SELECT 5 static int una_variable_estatica;
humor informática en 6
la vida real informático 7 // Una variable no estática
instalar PHP
ingeniero insert 8 int una_variable_no_estatica;
9
InterBase internet Java 10 // Un método estático
javadoc Juegos licencia manual de 11 static void haz_algo(void)
referencia map matemático 12 {
memoria dinámica mundo laboral 13 // Se pueden usar variables estáticas
organización
operator++ 14
15
una_variable_estatica = 5;
del desarrollo 16 // Error: no se pueden usar variables que
organizar ficheros en 17 // requieren un puntero this
directorios palabra clave 18 una_variable_no_estatica = 5; // Error de compilación
performancia PHP 19 }
phpDocumentor PHP en 20
21 // Un método normal (no estático)
Windows post-fix pre-fix prefijo
22 void haz_otra_cosa(void)
mejor que postfijo
programación
23 {
24 // Se pueden usar variables y métodos estáticos
punteros Seguridad 25 // también en métodos no estáticos
26 una_variable_estatica = 5;
seguridad de datos 27 haz_algo();
Simulación numérica 28
software propietario 29 // Una variable de instancia en un método de instancia
STL title tooltip variable 30
31 }
una_variable_no_estatica = 5; // Correcto
velocidad de código 32 };
ARCHIVOS
Es posible llamar a métodos estáticos de una clase sin tener una instancia de ella
Elegir mes utilizando el nombre cualificado.

1 void una_funcion_cualquiera(void)
DICIEMBRE 2010
2 {
3 // Correcto: Se puede llamar a un método no estático
L M X J V S D 4 // si instancia
1 2 3 4 5 5 MiClase::haz_algo();
6
6 7 8 9 10 11 12 7 // Sin embargo, también se le puede llamar con instancia
13 14 15 16 17 18 19 8 MiClase mi_instancia;
20 21 22 23 24 25 26 9 mi_instancia.haz_algo();
10
27 28 29 30 31 11 // No es posible llamar a un método convencional
« Nov Ene » 12 // sin instancia
13 MiClase::haz_otra_cosa(); // Error de compilación
SITOS DE INTERÉS
14 }

Biblioteca Boost Métodos estáticos son similares a funciones globales. Sólo llevan el nombre de la
clase como prefijo. (Un nombre de espacio no se usa de forma diferente que una
C++ FAQ
clase con todos los miembros públicos y estáticos.)
Doxygen
Macros predefinidos de Métodos estáticos pueden sobrecargar los nombres métodos no estático.
compiladores C/C++ De hecho es una práctica bastante común – sobre todo para métodos recursivos.
phpDocumentor Como ejemplo podemos considerar una clase String, en que un método
Regular Expressions – User convencional afecta a la instancia de una clase, mientras el método estático a un
guide parámetro.
Understand an Engineer 1 class String
www.cplusplus.com 2 {
3 public:
4
5 // Crea una instancia con todas las letras del parámetro
6 // convertidas a minúsculas.
7 static String a_minusculas(const String& instancia_de_string);
8
9 // Convierte todas las letras de ESTA instancia a minúsculas
10 void a_minusculas(void)
11 {
12 *this = a_minusculas(*this);
13 }
14 };

Enlace interno
Finalmente es posible declarar estáticos funciones y variables globales, es decir,
fuera de una función. Una variable a nivel global existe durante toda la ejecución
del programa sea estática o no. Y cualquier función tiene acceso a una variable
global. Por eso static tiene otro significado fuera de un bloque {}: especifica
que el identificador tiene enlace interno.

Enlace interno quiere decir, que el linker no puede usar este nombre para
enlazarlo con otro módulo. Es un nombre privado en el fichero de objeto (.o
o .obj). El contrario es un enlace externo: El fichero objeto expone este nombre
y su tipo al linker que puede usar esta información para enlazarlo con una
referencia en otro módulo.

El modificador static en una función o variable suprime el enlace externo. Se


puede forzar un enlace externo con el modificador extern. Por defecto,
funciones tienen un enlace externo y variables interno. Por eso no es necesario
declarar una función extern y una variable static, pero mejora la semántica
del código.

Conclusión
Hemos visto que la palabra clave static se usa para declarar variables de un
alcance limitado pero con una vida durante toda la ejecución del programa.
Métodos estáticos se limitan a acceder a variables miembros estáticos de la
clase. Finalmente se usa el modificador static para forzar un enlace interno.

Como última nota cabe mencionar, que el uso de variables estáticas puede
complicar la creación de procesos multi-hilo, ya que estos datos son
comunes a todos los hilos.

Referencias
Como usar const en C++

Me gusta

A un bloguero le gusta esto.

RELA C I O NADO

Punteros a funciones Como usar const en Programación


En "C++" C++ orientado a objetos
En "C++" en C
En "C++"

9 comentarios
Comments feed for this article

22 julio 2011 a 04:50 Bastante clara la explicacion, gracias


Pedro
Responder

24 julio 2011 a 17:39 Muchas gracias a ti por los ánimos.


trucosinformaticos Por favor, déjame saber si queda
alguna duda.

Responder

29 octubre 2011 a 10:36 gracias, esta bn explicado !! +10


alberto
Responder

30 octubre 2011 a 18:08 Gracias por los ánimos.


trucosinformaticos
Responder

3 octubre 2013 a 23:33 Gracias!!


Pablo
Responder

13 abril 2014 a 21:09 Excelente informacion!


Maxiro
Responder

19 abril 2014 a 19:35 Gracias.


trucosinformaticos
Responder

28 septiembre 2016 a 05:41 Excelente explicación. ¡Gracias!


Kevin
Responder

29 septiembre 2016 a 21:21 Gracias a ti por el piropo.


trucosinformaticos
Responder

RESPONDER

Introduce aquí tu comentario...

« Aprovechar código viejo Programación orientado a objetos en C »

Search

Subscribe to feed.
Ben Eastaugh and Chris Sternal-Johnson.

You might also like