Función de miembro estático de C++ y variable de miembro estático

El papel de las funciones miembro estáticas

  • Llamar a esta función no accederá ni modificará ningún miembro de datos de objeto (no estático)
  • Se puede llamar sin crear un objeto

Motivo:
los miembros estáticos (variables/métodos) de una clase pertenecen a la clase en sí, la memoria se asigna cuando se carga la clase y se puede acceder a ella directamente a través del nombre de la clase.
Los miembros no estáticos (variables/métodos) pertenecen al objeto de la clase.La memoria se asigna solo cuando se genera la clase correspondiente (se crea la instanciación de la clase), y luego se accede a través del objeto instanciado de la clase.


variable miembro estática

  • Las variables de miembros estáticos existen antes que los objetos, por lo que las variables de miembros estáticos deben inicializarse fuera de la clase
  • Las variables miembro estáticas son propiedad de toda la clase.
  • Se puede acceder directamente a las variables miembro estáticas compartidas a través del nombre de la clase
  • Todos los objetos de la clase comparten las variables miembro estáticas de la clase

función miembro estática

  • La función de miembro estático de la clase solo puede acceder a variables de miembro estático y funciones de miembro estático (porque no acepta este puntero, acceso inteligente al miembro estático de la clase)
  • Se puede acceder a una función miembro estática pública de una clase mediante el nombre de la clase
  • Se puede acceder a las funciones de miembros estáticos públicos de una clase por nombre de objeto
  • Las funciones de miembros estáticos no pueden ser modificadas por virtuales, porque los miembros estáticos solo pertenecen a la clase, no a la instanciación de ninguna clase, por lo que no tienen significado práctico.
class mybook
{

public:
    static int width;
    static int page_num;
    static void print()
    {
        cout<<"书本的页数为:"<<page_num<<endl;
    }
};
int mybook::page_num = 10;
int mybook::width = 100;
int main() {
    mybook book1;
    book1.print();
    mybook::page_num = 15;

    book1.print();

    mybook book12;
    book12.print();
    
    return 0;
}

Supongo que te gusta

Origin blog.csdn.net/weixin_40824135/article/details/128836330
Recomendado
Clasificación