Miembros Especiales de la Clase en C++ (Práctica 2)
Open Source Your Knowledge, Become a Contributor
Technology knowledge has to be shared and made accessible for free. Join the movement.
Variables y métodos static
Al interior de la definición de una clase se utiliza la palabra reservada static
para declarar miembros de la clase que no están ligados
a ninguna instancia (objeto) de la misma. Por tanto, no se necesita declarar ningun objeto de dicha clase para poder acceder a esos miembros
(static: cppreference.com). En general, un miembro static
es un componente de la clase que es compartido por todas las instancias (objetos) de la misma, por ejemplo, una variable static
conserva su valor para todos los objetos de la clase. También vale la pena mencionar que static
es de utilidad cuando en una clase se desea declarar miembros que son objetos del mismo tipo de la clase. Además, en C++ no se permite que una clase tenga miembros no-estáticos del mismo tipo de la clase, el compilador arroja el error: field 'x' has incomplete type 'Class'
.
class MyClass
{
public:
static int var; //Declaración de una variable 'static'
static void oneMethod(); //Declaración de un método 'static'
};
int MyClass::var = 100; //Definición de la variable 'static'
void MyClass::oneMethod() //Definición del método 'static'
{
//lo que hace el método
}
Hay que tener en cuenta que la palabra static
solo debe utilizarse en la declaración del miembro en la definición de la clase. Por fuera de la
clase, en la definición de los miembros no debe usarse (observe el ejemplo anterior). Observe también la utilización del operador de resolución de
contexto (ámbito) ::
El ejemplo más usual de utilización de miembros static
en una clase es en el que se declara un miembro que permite contar el número de instancias (objetos) de la clase que se han declarado. Observe y ejecute el código a continuación:
Para acceder a un miembro static m
de una clase cualquiera T
se puede hacer de las siguientes formas: 1. Refieriendose a la clase con el operador
de resolución de contexto T::m
y 2. A través de una expresión de acceso E
(operadores .
y ->
) E.m
o bien E->m
siempre y cuando E
se
se resuelva (retorne) como T
o T*
respectivamente.