Manufactura industrial
Internet industrial de las cosas | Materiales industriales | Mantenimiento y reparación de equipos | Programación industrial |
home  MfgRobots >> Manufactura industrial >  >> Industrial programming >> Lenguaje C

Entendiendo las Clases de Almacenamiento en C++: Alcance, Vida y Uso

Una clase de almacenamiento define el alcance (visibilidad) y el tiempo de vida de variables y/o funciones dentro de un programa C++. Estos especificadores preceden al tipo que modifican. Hay las siguientes clases de almacenamiento, que pueden usarse en un programa C++:

La Clase de Almacenamiento auto

La clase de almacenamiento auto es la clase de almacenamiento por defecto para todas las variables locales.

{
    int mount;
    auto int month;
}

El ejemplo anterior define dos variables con la misma clase de almacenamiento, auto solo puede usarse dentro de funciones, es decir, variables locales.

La Clase de Almacenamiento register

La clase de almacenamiento register se usa para definir variables locales que deberían almacenarse en un registro en lugar de RAM. Esto significa que la variable tiene un tamaño máximo igual al tamaño del registro (usualmente una palabra) y no puede tener el operador unario '&' aplicado (ya que no tiene una ubicación de memoria).

{
    register int millas;
}

register solo debe usarse para variables que requieren acceso rápido como contadores. También debe notarse que definir 'register' no significa que la variable será almacenada en un registro. Significa que PUEDE ser almacenada en un registro dependiendo de restricciones de hardware e implementación.

La Clase de Almacenamiento static

La clase de almacenamiento static instruye al compilador a mantener una variable local en existencia durante la vida del programa en lugar de crearla y destruirla cada vez que entra y sale de alcance. Por lo tanto, hacer variables locales static les permite mantener sus valores entre llamadas a funciones.

El modificador static también puede aplicarse a variables globales. Cuando esto se hace, causa que el alcance de esa variable se restrinja al archivo en el que se declara.

En C++, cuando static se usa en un miembro de datos de clase, causa que solo una copia de ese miembro sea compartida por todos los objetos de su clase.

#include <iostream>
// Declaración de función
void func(void);
static int count = 10; /* Variable global */
int main() {
    while(count--) {
        func();
    }
    return 0;
}
// Definición de función
void func(void) {
    static int i = 5; // variable local static
    i++;
    std::cout << "i is " << i;
    std::cout << " and count is " << count << std::endl;
}

Cuando el código anterior se compila y ejecuta, produce el siguiente resultado:

i is 6 and count is 9
i is 7 and count is 8
i is 8 and count is 7
i is 9 and count is 6
i is 10 and count is 5
i is 11 and count is 4
i is 12 and count is 3
i is 13 and count is 2
i is 14 and count is 1
i is 15 and count is 0

La Clase de Almacenamiento extern

La clase de almacenamiento extern se usa para dar una referencia de una variable global que es visible para TODOS los archivos del programa. Cuando usas 'extern', la variable no puede ser inicializada ya que todo lo que hace es apuntar el nombre de la variable a una ubicación de almacenamiento que ha sido definida previamente.

Cuando tienes múltiples archivos y defines una variable global o función, que será usada en otros archivos también, entonces extern se usará en otro archivo para dar referencia de la variable o función definida. Solo para entender, extern se usa para declarar una variable global o función en otro archivo.

El modificador extern se usa más comúnmente cuando hay dos o más archivos compartiendo las mismas variables globales o funciones como se explica a continuación.

Primer Archivo: main.cpp

#include <iostream>
int count;
extern void write_extern();
int main() {
    count = 5;
    write_extern();
}

Segundo Archivo: support.cpp

#include <iostream>
extern int count;
void write_extern(void) {
    std::cout << "Count is " << count << std::endl;
}

Aquí, la palabra clave extern se está usando para declarar count en otro archivo. Ahora compila estos dos archivos de la siguiente manera:

$ g++ main.cpp support.cpp -o write

Esto producirá el programa ejecutable write, intenta ejecutar write y verifica el resultado como sigue:

$ ./write
5

La Clase de Almacenamiento mutable

El especificador mutable se aplica solo a objetos de clase, que se discuten más adelante en este tutorial. Permite que un miembro de un objeto anule una función miembro const. Es decir, un miembro mutable puede ser modificado por una función miembro const.

Lenguaje C

  1. Dominando los Operadores en C++: Guía Completa con Ejemplos Prácticos
  2. Clases y Objetos en C++: Guía Práctica de Programación Orientada a Objetos
  3. Funciones y clases amigas en C++: dominando el control de acceso
  4. Dominando las plantillas de clase en C++: guía práctica
  5. Entendiendo las clases de almacenamiento en C: ámbito, vida y rendimiento
  6. Entendiendo las clases de almacenamiento en C: Alcance, vida útil y uso
  7. Entendiendo el Polimorfismo en C++: Guía Práctica
  8. Dominando la Abstracción de Datos en C++: Simplifica el Diseño con Separación Interfaz-Implementación
  9. Encapsulamiento de Datos en C++: Protege tu Código
  10. Interfaces en C++: Dominando Clases Abstractas y Funciones Virtuales Puras
  11. Clases en C#: Blueprint para programación orientada a objetos potente