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;
}