2010-02-18 27 views
7

Tengo una pregunta sobre la función y la variable estáticas y no estáticas.función no estática frente a función estática y variable

1) variable estática de acceso a la función no estática.

¡Está bien!

class Bar 
{ 
public: 

    static int i; 

    void nonStaticFunction() { 

     Bar::i = 10; 

    } 

}; 

int Bar::i=0; 

2) acceso a las funciones no estático no estático variable de

sin duda está bien!

3) acceso a la función estática variable estática & Funciton

sin duda está bien!

4) acceso a la función estática no estático función

Está bien

class Bar 
{ 
public: 
    static void staticFunction(const Bar & bar) 
    { 
     bar.memberFunction(); 

    } 

    void memberFunction() const 
    { 

    } 

} 

5) acceso a la función estática no estático variable de

Está bien o no está bien? ¡Estoy desconcertado acerca de esto!

¿Qué tal este ejemplo

class Bar 
{ 
public: 
    static void staticFunction(Bar & bar) 
    { 
     bar.memberFunction(); 

    } 

    void memberFunction() 
    { 

     i = 0; 
    } 

    int i; 

}; 

Respuesta

9

acceso a la función estática no estático variables

está bien o no está bien? Estoy desconcertado acerca de esto!

Cuando se llama, una función estática no está vinculada a una instancia de la clase. Las instancias de clase (objetos) serán las entidades que contienen las variables "no estáticas". Por lo tanto, a partir de la función estática, no podrá acceder a ellos sin pasar realmente o almacenar en otro lugar una instancia específica para operar.

Así que sí, el código en su último ejemplo es válido, porque se pasa en una instancia. Sin embargo, no se pudo hacer:

static void staticFunction() 
{ 
    // error, this function is static, and is therefore 
    // not bound to a specific instance when called 
    i = 5; 


} 
1

no está bien. Las funciones estáticas son accesibles sin tener una instancia de una clase y, por lo tanto, no pueden acceder a la información que necesitaría una instancia para determinar.

Por ejemplo, no necesita un automóvil para saber cuántas ruedas tiene, los planos para un automóvil en general serían suficientes (eso podría ser información estática) pero no puede decir de qué color es el automóvil a menos que ' re refiriéndose a un coche específico (que la información necesita una instancia específica de un objeto.)

7

Estático significa que esto es independiente de una instancia particular de la clase. Los métodos estáticos no tienen acceso al puntero this. Esa es la razón por la que debe llamarlos usando el nombre de clase .

Cuando llama al método Estático, es posible que ni siquiera tenga una instancia de la clase definida.

medios no estáticos implica una instancia, y podría ser diferente con instancias diferentes.

Así que, básicamente, no tiene sentido acceder a miembros no estáticos desde métodos estáticos.

1

Para esto, necesita comprender qué es estático.

Los miembros de datos estáticos existen una vez para toda la clase, a diferencia de los miembros de datos no estáticos, que existen individualmente en cada instancia de una clase. Tendrán un alcance de clase y no están vinculados a una instancia de la clase.

Para acceder miembro estático de la clase, se utiliza el formato de la siguiente manera ::

si ha creado 10 objetos de una clase. Supongamos que puede acceder a la variable no estática en el miembro estático de la clase. Cuando se llama a la función estática, ¿qué miembro del objeto debe cambiar?

Cuestiones relacionadas