Métodos e atributos estáticos
O que são membros estáticos?
Em C++, membros estáticos (atributos e métodos) são associados à classe, e não às instâncias (objetos) dela. Isso significa que:
- Existe apenas uma cópia do membro estático, independente de quantos objetos da classe sejam criados.
- Membros estáticos podem ser acedidos sem a necessidade de criar um objeto da classe.
Atributos Estáticos
Definição
Um atributo estático é declarado usando a palavra-chave static dentro da classe. Ele é compartilhado por todos os objetos da classe.
class Exemplo {
public:
static int contador;
};
Inicialização
A inicialização de um atributo estático deve ser feita fora da definição da classe, usando o operador de resolução de escopo :::
int Exemplo::contador = 0;
Acesso
- Pode ser acedido via objeto ou diretamente pela classe:
Exemplo::contadorobj.contador
Exemplo Prático
#include <iostream>
using namespace std;
class Carro {
public:
static int total;
Carro() { total++; }
~Carro() { total--; }
static int getTotal() { return total; }
};
int Carro::total = 0;
int main() {
Carro c1, c2;
cout << "Total de carros: " << Carro::getTotal() << endl;
return 0;
}
Neste exemplo, o atributo total conta quantos objetos da classe foram criados e destruídos.
Métodos Estáticos
Definição
Um método estático é declarado com a palavra-chave static dentro da classe. Ele pode ser chamado sem a necessidade de um objeto.
class Exemplo {
public:
static void mostrarMensagem() {
cout << "Método estático chamado!" << endl;
}
};
Características
- Não pode aceder a membros não estáticos da classe diretamente.
- Só pode aceder a outros membros estáticos (atributos ou métodos).
- Não possui o ponteiro
this.
Acesso
- Chamado diretamente pela classe:
Exemplo::mostrarMensagem();
Exemplo Prático
#include <iostream>
using namespace std;
class Util {
public:
static void saudacao() {
cout << "Bem-vindo aos métodos estáticos!" << endl;
}
};
int main() {
Util::saudacao();
return 0;
}
O método saudacao pode ser chamado sem criar um objeto da classe.
Resumo das Diferenças
| Característica | Estático (static) | Não Estático |
|---|---|---|
| Associação | Classe | Objeto |
| Quantidade | Uma por classe | Uma por objeto |
| Acesso | Classe::membro | objeto.membro |
| Acesso a membros | Só membros estáticos | Todos os membros |
Ponteiro this | Não disponível | Disponível |
Quando usar membros estáticos?
- Para contar quantos objetos de uma classe foram criados.
- Para armazenar configurações globais ou recursos compartilhados.
- Para implementar métodos utilitários que não dependem de dados de instância.
- Para singleton (garantir uma única instância de uma classe).
Dicas Importantes
- Inicialize sempre atributos estáticos fora da classe.
- Métodos estáticos não podem aceder membros não estáticos diretamente.
- Prefira aceder membros estáticos usando o nome da classe para maior clareza.
Conclusão
Membros estáticos são essenciais para situações em que um dado ou comportamento deve ser compartilhado entre todos os objetos de uma classe, ou quando não faz sentido associar um método a uma instância específica.
