Miembros Especiales de la Clase en C++ (Práctica 2)

camilocorreaUdeA
109.5K views

Open Source Your Knowledge, Become a Contributor

Technology knowledge has to be shared and made accessible for free. Join the movement.

Create Content
Next: Métodos const

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.

¿Se puede acceder a un miembro static a través de un objeto de la clase?
Open Source Your Knowledge: become a Contributor and help others learn. Create New Content