- Encapsulación y extensión de tipos
- Herencia
- Polimorfismo
- Sobrecarga
- Funciones virtuales
- Miembros estáticos de una clase
- Plantillas de funciones
- Plantillas de clases
- Clases abstractas
Miembros estáticos de una clase/estructura
Miembros estáticos
Los miembros de una clase pueden ser declarados con el uso del modificador de la clase de memoria static. Estos miembros de datos se comparten por todos los ejemplares de esta clase y se guardan en un sitio. Los miembros de datos no estáticos se crean para cada variable-objeto de la clase.
La imposibilidad de declarar los miembros estáticos de una clase conduciría a la necesidad de declarar estos datos a nivel global del programa. Esto rompería las relaciones entre los datos y su clase, además de no concordarse con el paradigma básica de la POO - la unión de datos y métodos para su procesamiento dentro de una clase. El miembro estático permite existir a los datos de la clase que no son específicos para un ejemplar particular, en el campo de alcance de la clase.
Puesto que un miembro estático de la clase no depende de un ejemplar concreto, la referencia a él es como sigue:
class_name::variable |
donde class_name es el nombre de la clase, y variable significa el nombre del miembro de la clase.
Como ve, para acceder al miembro estático de la clase, se utiliza el operador de resolución de contexto ::. Cuando accedemos a un miembro estático dentro de los métodos de la clase, el operador de contexto es opcional.
El miembro estático de la clase debe ser inicializado explícitamente con un valor necesario. Para eso hay que declarar e inicializarlo a nivel global. El orden de la inicialización de los miembros estáticos va a corresponder al orden de su declaración a nivel global en el código fuente.
Por ejemplo, tenemos una clase CParser que se utiliza para el análisis sintáctico de textos, y necesitamos obtener el número total de palabras y símbolos procesados. Sólo hay que declarar los miembros necesarios de la clase como estáticos e inicializarlos a nivel global. Entonces, todos los ejemplares de la clase van a utilizar durante su trabajo los contadores comunes de palabras y símbolos.
//+------------------------------------------------------------------+ |
Un miembro estático de la clase puede ser declarado con la palabra clave const. Estas constantes estáticas tienen que ser inicializadas a nivel global con la palabra clave const:
//+------------------------------------------------------------------+ |
Puntero this #
La palabra clave this denota un puntero declarado implícitamente a sí mismo a un ejemplar concreto de la clase en contexto del cual se ejecuta el método. Se puede utilizarlo sólo en los métodos no estáticos de la clase. El puntero this es un miembro implícito no estático de cualquier clase.
En las funciones estáticas se puede acceder sólo a los miembros/métodos estáticos de la clase.
Métodos estáticos
En MQL5 se permite utilizar las funciones-miembros del tipo static. El modificador static debe ir antes del tipo de la función devuelto en la declaración dentro de la clase.
class CStack
|
El método con modificador const se llama constante y no puede modificar los miembros implícitos de su clase. La declaración de las funciones constantes de la clase y los parámetros constantes se llama control de constancia (const-correctness). Gracias a este control se puede estar seguro de que el compilador va a controlar la constancia de valores de los objetos y mostrará error en la fase de compilación en caso de violación.
El modificador const se pone después de la lista de argumentos dentro de la declaración de la clase. La definición fuera de la clase también debe incluir el modificador const:
//+------------------------------------------------------------------+ |
Como argumento adicional a favor del uso del control de constancia sirve el hecho de que el compilador en este caso genera una optimización especial. Por ejemplo, coloca el objeto constante en la memoria sólo para la lectura.
Una función estática no puede ser determinada con el modificador const, puesto que este modificador garantiza la constancia de los miembros del ejemplar cuando se llama a esta función. Pero, como ya hemos dicho antes, una función estática por definición no puede acceder a los miembros no estáticos de la clase.
Véase también
Variables estáticas, Variables, Enlaces. Modificador & y la palabra clave this