El significado de static en clase en C ++

Miembros decorados estáticos de la clase, dijeron los datos compartidos de la clase

miembros de clase de decoración estática

Como se menciona en el manual de C ++, los miembros de clase estática no son como los miembros de datos de clase ordinarios, sino que son independientes de todos los objetos de clase. Los miembros de datos de clase estática están asociados con la clase, pero no tienen ninguna relación con los objetos definidos por la clase. Es decir, static no tiene una copia de cada objeto de clase como los miembros de datos de clase ordinarios. Todos los objetos de clase comparten un miembro de clase estático.
Por ejemplo, el miembro estático del objeto de clase A se cambia a 1, entonces el valor del miembro del objeto de clase estática correspondiente al objeto B también será 1.
Nota: los objetos de clase estática deben inicializarse fuera de la clase

class Text  
{  
    public:  
    static int count;  
};  
  
int Text::count=0;//用static成员变量必须要初始化   
  
int main()  
{  
    Text t1;  
    cout<<t1.count<<endl;   
    return 0;  
}//程序输出0

Las variables modificadas estáticas existen antes que los objetos, por lo que las variables modificadas estáticas deben inicializarse fuera de la clase. Como estática es una variable compartida por todos los objetos, debe existir antes que el objeto.

class Text  
{  
    public:  
    static int count;  
};  
  
int Text::count=0;//用static成员变量必须要初始化   
  
int main()  
{  
    Text t1;  
    Text t2;  
      
    t1.count = 100;     //t1对象把static成员count改为100   
    cout<<t2.count<<endl; //当t2对象打印static成员的时候,显示的是100而不是0   
    return 0;  
}

Beneficios:

La variable miembro modificada con static no ocupa memoria en el objeto, porque no se genera en el montón o pila con el objeto, y la variable modificada con static se genera en el área de almacenamiento estático. Por lo tanto, la ventaja de utilizar la modificación estática por un lado es ahorrar espacio en la memoria del objeto. Del mismo modo que crea 100 objetos Persona, y los 100 objetos tienen una variable común, por ejemplo, la variable de nacionalidad, es decir, la nacionalidad del objeto Persona es la misma.
Si la variable de nacionalidad se modifica con estática, incluso si hay 100 objetos Persona, no se crearán 100 variables de nacionalidad, solo se necesita una variable de nacionalidad modificada estáticamente. Cuando se van a utilizar estos 100 objetos, se llamarán variables de nacionalidad modificadas estáticamente. De lo contrario, si hay 100 variables Persona, se crearán 100 variables de nacionalidad. Si las variables de nacionalidad son las mismas, es un desperdicio de espacio.

función de miembro de clase estática modificada

Como los miembros de clase modificados estáticamente pertenecen a la clase, no al objeto, la función de miembro de clase estática no tiene este puntero, este puntero es un puntero a este objeto. Debido a que no existe este puntero, las funciones de miembro de clase estática no pueden acceder a miembros de clase no estáticos, solo a miembros de clase modificados estáticos.

class Text  
{  
    public:  
    static int fun()  
    {  
        return num;  
    }  
    static int count;  
    int num;  
};  
int Text::count=5;//用static成员变量必须要初始化   
  
int main()  
{  
    Text t1;  
    Text t2;  
    t1.num=100;  
      
    t1.fun();//发生错误,fun函数return的是非static类成员 如果return count就正确   
    return 0;  
}
Publicado 44 artículos originales · elogiado 8 · visitas 6734

Supongo que te gusta

Origin blog.csdn.net/zhaodeming000/article/details/105433546
Recomendado
Clasificación