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::contador
    • obj.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ísticaEstático (static)Não Estático
AssociaçãoClasseObjeto
QuantidadeUma por classeUma por objeto
AcessoClasse::membroobjeto.membro
Acesso a membrosSó membros estáticosTodos os membros
Ponteiro thisNão disponívelDisponí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.