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 static
modificador 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 static
palavra - 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::count
sempre mantenha o número de Requests que foram construídos, e cada novo objeto Request recebe um number
em 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 number
campo distinto .
Observe também que a variável Request::count
é inicializada apenas uma vez.