0Pricing
C++ Academy · Aula

Operadores de subscrito e chamada de função

Sobrecarregue [] e () para fazer com que os tipos se comportem como contentores ou objetos chamáveis

Operadores de subscrito e chamada de função é uma aula grátis de C++ Academy no CoddyKit. Esta é a aula 3 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de C++ Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de C++ Academy inclui 4 aulas no total.

operator[] — Acesso indexado

Sobrecarregue [] para tornar seu tipo utilizável como um vetor. Isso é útil para contêineres, matrizes e classes de imagem.

class Vec {
    std::vector<double> data_;
public:
    double& operator[](size_t i) { return data_[i]; }
    double  operator[](size_t i) const { return data_[i]; }
};

Duas sobrecargas: const e não const

Forneça ambas. A chamada em uma instância const é direcionada à sobrecarga const; a versão não const permite atribuições.

Verificação de limites

Por convenção, o operator[] simples não verifica os limites. Forneça um método at() separado que lance uma exceção — como na biblioteca padrão.

double& at(size_t i) {
    if (i >= data_.size()) throw std::out_of_range("");
    return data_[i];
}

Subscrito multidimensional (C++23)

O C++23 adicionou o subscrito com argumentos separados por vírgula: m[i, j]. As versões anteriores exigem uma chamada de função ou subscritos encadeados.

// C++23
double& operator[](size_t i, size_t j);

// Pre-C++23 workaround
double& operator()(size_t i, size_t j);

operator() — Chamada de função

Sobrecarregue () para tornar as instâncias chamáveis. Isso é usado para objetos função, indexação de matrizes e predicados configuráveis.

struct Square {
    int operator()(int x) const { return x * x; }
};

Square sq;
std::cout << sq(5);   // 25

Objetos função com estado

O operador de chamada de função funciona com variáveis membro, criando um objeto chamável com estado.

struct GreaterThan {
    int threshold;
    bool operator()(int x) const { return x > threshold; }
};

GreaterThan over10{10};
std::cout << over10(15);   // true

Uso com algoritmos da STL

Passe instâncias de objetos função para os algoritmos no lugar de funções.

std::vector<int> v = {1, 11, 2, 22};
auto it = std::find_if(v.begin(), v.end(), GreaterThan{10});

Operadores com vários argumentos

Tanto [] (antes do C++23) quanto () podem ser sobrecarregados com qualquer número de argumentos. Antes do C++23, () é a opção mais flexível para acesso semelhante ao de matrizes.

Retornando referências ou valores

Retorne uma referência para permitir atribuições por meio do subscrito. Retorne por valor para tipos somente leitura.

Objetos proxy

Se operator[] precisar retornar um objeto complexo, como um campo de bits, retorne uma pequena classe proxy com operadores de conversão e atribuição.

Exemplos do mundo real

Usos comuns:

  • std::vector::operator[]
  • std::map::operator[] — insere quando as chaves estão ausentes
  • Classes de matriz: m(i, j)
  • Objetos função para algoritmos

Verificação rápida

Como tornar instâncias de uma classe chamáveis como uma função?

Resumo

Sobrecarregue [] para acesso indexado (forneça sobrecargas const e não const). Sobrecarregue () para tornar as instâncias chamáveis — essa é a base dos objetos função e das lambdas.

Perguntas Frequentes

A aula “Operadores de subscrito e chamada de função” é grátis?

Sim — o texto completo de “Operadores de subscrito e chamada de função” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de C++ Academy, atualize para CoddyKit PRO. O curso de C++ Academy inclui 4 aulas no total.

O que vou aprender em “Operadores de subscrito e chamada de função”?

Sobrecarregue [] e () para fazer com que os tipos se comportem como contentores ou objetos chamáveis Você pratica C++ Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.

Preciso ter experiência prévia para começar C++ Academy?

Nenhuma experiência prévia é necessária. C++ Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 3 de 4.

Quanto tempo leva a aula “Operadores de subscrito e chamada de função”?

A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.

Posso escrever e executar código nesta aula de C++ Academy?

Sim. Cada aula de C++ Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.

Todas as aulas deste curso

  1. Operadores aritméticos e de comparação
  2. Operadores de inserção e extração de fluxos
  3. Operadores de subscrito e chamada de função
  4. Operador de comparação de três vias no C++20
← Voltar para C++ Academy