es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Por qué se necesitan miembros de datos estáticos de C ++ para definir pero los miembros de datos no estáticos no?

Estoy tratando de entender la diferencia entre la declaración y definición de miembros de datos estáticos y no estáticos. Disculpas si no entiendo los conceptos fundamentalmente. Se agradecen mucho sus explicaciones.

Código que estoy tratando de entender

class A
{
public:
    int ns; // declara miembro de datos no estático.
    static int s; // declara miembro de datos estático.
    void foo();

};

int A::s; // define miembro de datos no estático.
// int A::ns; //Esto da un error si se define.

void A::foo()
{
    ns = 10;
    s = 5; // si s no está definido, esto da un error de "referencia indefinida"
}
Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Explicación

    Declaración

    En C++, la declaración de una variable o función significa proporcionar información al compilador acerca de su existencia y uso adecuado, incluyendo su nombre, tipo de datos y control de acceso. En el código anterior, las siguientes son declaraciones:

    • int ns; — Esta es la declaración de un miembro de datos no estático de la clase A con el nombre ns.
    • static int s; — Esta es la declaración de un miembro de datos estático de la clase A con el nombre s.

    Definición

    En C++, la definición significa asignar espacio de almacenamiento y establecer el valor inicial para una variable o función declarada. En otras palabras, definir un objeto significa decirle al compilador dónde y cuánta memoria asignar para él. En el código anterior, las siguientes son definiciones:

    • int A::s; — Esto define el miembro de datos estático s de la clase A. Asigna la memoria para s y lo inicializa en cero.
    • void A::foo() — Esto define la función miembro foo() de la clase A. Asigna memoria para la función y proporciona su implementación.

    Miembros de datos estáticos vs no estáticos

    Los miembros de datos estáticos son variables de clase que son compartidas por todos los objetos de la clase. Existirán incluso si no se ha creado ningún objeto de la clase. Los miembros de datos no estáticos son variables de instancia que pertenecen a cada objeto de la clase. Solo existen cuando se crea un objeto de la clase.

    La diferencia principal entre la declaración y definición de miembros de datos estáticos y no estáticos es cuándo se asigna la memoria para ellos.

    Para un miembro de datos estático, su declaración también actúa como una definición, pero la memoria para él se asigna solo una vez cuando se define fuera de la clase. Es por eso que en el código anterior, tenemos int A::s; fuera de la clase para definir la memoria del miembro de datos estático s.

    Para un miembro de datos no estático, su declaración solo informa al compilador acerca de su existencia y tipo. La memoria se asigna para él cuando se crea un objeto de la clase. Por lo tanto, definir un miembro de datos no estático fuera de la clase dará como resultado un error, porque no hay memoria para asignar hasta que se cree un objeto.

    Espero que esto le brinde una comprensión clara de la declaración y definición de miembros de datos estáticos y no estáticos en C++.

Comments are closed.