Variável de classe - Class variable

Na programação orientada a objetos com classes , uma variável de classe é qualquer variável declarada com o staticmodificador do qual existe uma única cópia, independentemente de quantas instâncias da classe existam. Observe que em Java, os termos "campo" e "variável" são usados ​​alternadamente para variável de membro .

Uma variável de classe não é uma variável de instância . É um tipo especial de atributo de classe (ou propriedade de classe, campo ou membro de dados). A mesma dicotomia entre instância e membros de classe também se aplica a métodos ("funções de membro"); uma classe pode ter métodos de instância e métodos de classe .

Variáveis ​​de membro estático e funções de membro estático

Em algumas linguagens, variáveis ​​de classe e métodos de classe são resolvidos estaticamente, não por meio de despacho dinâmico , ou sua memória alocada estaticamente em tempo de compilação (uma vez para a classe inteira, como variáveis ​​estáticas ), não alocada dinamicamente em tempo de execução (a cada instanciação de um objeto). Em outros casos, entretanto, um ou ambos são dinâmicos. Por exemplo, se as classes podem ser definidas dinamicamente (em tempo de execução), as variáveis ​​de classe dessas classes são alocadas dinamicamente quando a classe é definida e, em algumas linguagens, os métodos de classe também são despachados dinamicamente.

Portanto, em alguns idiomas, a variável de membro estático ou a função de membro estática são usados ​​como sinônimos ou no lugar de "variável de classe" ou "função de classe", mas não são sinônimos entre os idiomas. Esses termos são comumente usados ​​em Java , C # e C ++ , onde variáveis ​​de classe e métodos de classe são declarados com a staticpalavra - chave e referidos como variáveis ​​de membro estático ou funções de membro estático .

Exemplo

struct Request {

    static int count;
    int number;

    Requestobject() {
        number = count; // modifies the instance variable "this->number"
        ++count; // modifies the class variable "Request::count"
    }

};

int Request::count = 0;

Neste exemplo C ++, a variável de classe Request::counté incrementada em cada chamada ao construtor , de forma que Request::countsempre mantenha o número de Requests que foram construídos, e cada novo objeto Request recebe um numberem ordem sequencial. Como counté uma variável de classe, há apenas um objeto Request::count; em contraste, cada objeto Request contém seu próprio numbercampo distinto .

Observe também que a variável Request::counté inicializada apenas uma vez.

Notas