C ++: utiliza para miembros de datos estáticos

Miembros de datos estáticos tienen usos incontables en C ++, pero aquí son sólo unos pocos. En primer lugar, puede utilizar miembros estáticos para llevar la cuenta del número de objetos que flotan alrededor.

Recuerde, sin embargo, que esta cuenta refleja el número de Estudiante objetos (incluidos los temporales) y no necesariamente el número de estudiantes.

Un uso estrechamente relacionado a un miembro estático es como una bandera para indicar si se ha producido una acción particular. Por ejemplo, una clase Radio puede ser necesario para inicializar el hardware antes de enviar la primera melodía de comandos, pero no antes de la posterior melodías. Una bandera que indica que esta es la primera melodía es sólo el billete. Esto incluye abanderamiento cuando se ha producido un error.


Otro uso común es proporcionar espacio para el puntero a la primera miembro de una lista - el denominado puntero de cabeza. Los miembros estáticos pueden asignar bits de datos común que todos los objetos de todas las funciones de acción (uso excesivo de esta memoria común es realmente una mala idea ya que al hacerlo comete errores de seguimiento difícil).

Observe cómo la función miembro estática número () puede tener acceso al miembro de datos estáticos noOfStudents. De hecho, ese es el único miembro de la clase que se puede acceder - una función miembro estática no está asociado con ningún objeto. ¿Estabas declarar nombre() ser estática, que puede referirse a Nombre de estudiante(), que sería pedir de inmediato la pregunta: " nombre que "?

El siguiente fragmento es sólo un caso en el que un método estático puede referirse directamente a un miembro no estática:

clase Student {public: static int elementsInName () {int sizeOfArray = sizeof (nombre) -Retorno sizeOfArray / sizeof (char) -} protegida: char nombre [MAX_NAME_SIZE] -} -

Aquí el método estático elementsInName () se refiere a nombre sin hacer referencia a ningún objeto. Esto no era legal antes de la norma 2011. Está permitido ahora porque el tamaño de nombre es el mismo para todos los objetos. Por lo tanto, no importa que el objeto que se refieren.

Usted puede preguntarse por qué sizeof (nombre) se dividió por sizeof (char). los sizeof (nombre) devuelve el número de bytes en el nombre de la matriz. Pero lo que quieres es el número de elementos en nombre, así que hay que dividir por el tamaño de cada elemento en el nombre.

Pero no es sizeof (char) igual a 1? Bueno, tal vez, pero tal vez no. La división de la tamaño de la matriz por el tamaño de un solo elemento siempre funciona para todos los tipos de matriz.




» » » » C ++: utiliza para miembros de datos estáticos