[Resumen de aprendizaje de análisis profundo de C ++] 26 tipos de funciones miembro estáticas

[Resumen de aprendizaje de análisis profundo de C ++] 26 tipos de funciones miembro estáticas

Código de autor Allen , por favor indique la fuente


1. Requisitos inacabados

  • Cuente el número de objetos de una clase determinada durante la ejecución del programa.
  • Garantizar la seguridad del programa (no se pueden usar variables globales)
  • El número de objetos actuales (Fallo) se puede obtener en cualquier momento

Intento de solución

#include <stdio.h>
class Test
{
public:
    static int cCount;
public:
    Test()
    {
        cCount++;
    }
    ~Test()
    {
        --cCount;
    }
    int getCount()
    {
        return cCount;
    }
};
int Test::cCount = 0;
int main()
{
    printf("count = %d\n", Test::cCount);  //直接打印类名
   
    Test::cCount = 1000;  //怎么明显也是不符合安全性的要求
   
    printf("count = %d\n", Test::cCount);
   
    return 0;
}

/*
运行结果
count = 0
count = 1000
*/

2. Análisis de problemas
¿Qué necesitamos?

  • Acceda a variables miembro estáticas sin depender de objetos
  • Se debe garantizar la seguridad de las variables miembro estáticas.
  • Acceso fácil y rápido al valor de las variables miembro estáticas

3. Funciones miembro estáticas Las funciones miembro estáticas
se pueden definir en C ++

  • Las funciones miembro estáticas son funciones miembro especiales en la clase
  • Las funciones miembro estáticas pertenecen a toda la clase.
  • Puede acceder directamente a las funciones públicas de miembros estáticos por nombre de clase
  • Puede acceder a las funciones públicas de miembros estáticos por nombre de objeto

Definición de función miembro estática

  • Modificar funciones miembro directamente a través de la palabra clave estática
    Inserte la descripción de la imagen aquí

Ejemplos de
funciones miembro estáticas Funciones miembro estáticas VS funciones miembro ordinarias
Inserte la descripción de la imagen aquí

#include <stdio.h>
class Demo
{
private:
    int i;
public:
    int getI();
    static void StaticFunc(const char* s);
    static void StaticSetI(Demo& d, int v);
};
int Demo::getI()
{
    return i;
}
void Demo::StaticFunc(const char* s)
{
    printf("StaticFunc: %s\n", s);
}
void Demo::StaticSetI(Demo& d, int v)
{
    d.i = v;
}
int main()
{
    Demo::StaticFunc("main Begin...");
   
    Demo d;
   
    Demo::StaticSetI(d, 10);
   
    printf("d.i = %d\n", d.getI());
   
    Demo::StaticFunc("main End...");
   
    return 0;
}

/*
运行结果
StaticFunc: main Begin...
d.i = 10
StaticFunc: main End...
*/

La solución final

#include <stdio.h>
class Test
{
private:
    static int cCount;
public:
    Test()
    {
        cCount++;
    }
    ~Test()
    {
        --cCount;
    }
    static int GetCount()
    {
        return cCount;
    }
};
int Test::cCount = 0;
int main()
{
    printf("count = %d\n", Test::GetCount());
   
    Test t1;
    Test t2;
   
    printf("count = %d\n", t1.GetCount());
    printf("count = %d\n", t2.GetCount());
   
    Test* pt = new Test();
   
    printf("count = %d\n", pt->GetCount());
   
    delete pt;
   
    printf("count = %d\n", Test::GetCount());
   
    return 0;
}

/*
运行结果
count = 2
count = 2
count = 3
count = 2
*/

Resumen
Las funciones miembro estáticas son funciones miembro especiales en una clase.
Las funciones miembro estáticas no han ocultado este parámetro.
Se puede acceder directamente a las
funciones miembro estáticas por nombre de clase. Las funciones miembro estáticas solo pueden acceder directamente a variables miembro estáticas (funciones)

Publicado 315 artículos originales · elogiado 937 · 650,000 visitas

Supongo que te gusta

Origin blog.csdn.net/super828/article/details/77920036
Recomendado
Clasificación