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); // 25Objetos 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); // trueUso 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
- Operadores aritméticos e de comparação
- Operadores de inserção e extração de fluxos
- Operadores de subscrito e chamada de função
- Operador de comparação de três vias no C++20