Opérateurs d’indice et d’appel de fonction
Surcharger [] et () pour que les types se comportent comme des conteneurs ou des objets appelables
Opérateurs d’indice et d’appel de fonction est une leçon C++ Academy gratuite sur CoddyKit. Ceci est la leçon 3 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage C++ Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours C++ Academy comprend 4 leçons au total.
operator[] — Accès indexé
Surchargez [] pour que votre type puisse être utilisé comme un tableau. C'est utile pour les conteneurs, les matrices et les classes d'images.
class Vec {
std::vector<double> data_;
public:
double& operator[](size_t i) { return data_[i]; }
double operator[](size_t i) const { return data_[i]; }
};Deux surcharges : const et non-const
Fournissez les deux. Un appel sur une instance const utilise la surcharge const ; une instance non const permet l'affectation.
Vérification des limites
Par convention, un operator[] simple ne vérifie pas les limites. Fournissez une méthode at() distincte qui lève une exception, comme dans la bibliothèque standard.
double& at(size_t i) {
if (i >= data_.size()) throw std::out_of_range("");
return data_[i];
}Indice multidimensionnel (C++23)
C++23 a ajouté l'indice séparé par des virgules : m[i, j]. Les versions précédentes nécessitent un appel de fonction ou des indices chaînés.
// C++23
double& operator[](size_t i, size_t j);
// Pre-C++23 workaround
double& operator()(size_t i, size_t j);operator() — Appel de fonction
Surchargez () pour rendre les instances appelables. Cette technique est utilisée pour les foncteurs, l'indexation des matrices et les prédicats configurables.
struct Square {
int operator()(int x) const { return x * x; }
};
Square sq;
std::cout << sq(5); // 25Foncteurs avec état
L'opérateur d'appel de fonction peut utiliser des variables membres : vous obtenez ainsi un objet appelable avec état.
struct GreaterThan {
int threshold;
bool operator()(int x) const { return x > threshold; }
};
GreaterThan over10{10};
std::cout << over10(15); // trueUtilisation avec les algorithmes STL
Passez des instances de foncteurs aux algorithmes à la place de fonctions.
std::vector<int> v = {1, 11, 2, 22};
auto it = std::find_if(v.begin(), v.end(), GreaterThan{10});Opérateurs à plusieurs arguments
[] (avant C++23) et () peuvent tous deux être surchargés avec un nombre quelconque d'arguments. Avant C++23, () est le choix le plus flexible pour un accès de type matriciel.
Retourner des références ou des valeurs
Retournez une référence pour permettre l'affectation par l'intermédiaire de l'indice. Retournez une valeur pour les types en lecture seule.
Objets proxy
Si operator[] doit retourner un objet complexe, comme un champ de bits, retournez une petite classe proxy dotée d'opérateurs de conversion et d'affectation.
Exemples concrets
Utilisations courantes :
std::vector::operator[]std::map::operator[]— insère les clés absentes- Classes de matrices :
m(i, j) - Foncteurs pour les algorithmes
Vérification rapide
Comment rendre les instances d'une classe appelables comme une fonction ?
Récapitulatif
Surchargez [] pour l'accès indexé (fournissez des surcharges const et non const). Surchargez () pour rendre les instances appelables : c'est la base des foncteurs et des lambdas.
Questions Fréquemment Posées
La leçon « Opérateurs d’indice et d’appel de fonction » est-elle gratuite ?
Oui — le texte complet de « Opérateurs d’indice et d’appel de fonction » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours C++ Academy, passe à CoddyKit PRO. Le cours C++ Academy comprend 4 leçons au total.
Qu'est-ce que j'apprendrai dans « Opérateurs d’indice et d’appel de fonction » ?
Surcharger [] et () pour que les types se comportent comme des conteneurs ou des objets appelables Tu pratiques C++ Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.
Dois-je avoir de l'expérience pour commencer C++ Academy ?
Aucune expérience préalable n'est requise. C++ Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 3 sur 4.
Combien de temps prend la leçon « Opérateurs d’indice et d’appel de fonction » ?
La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.
Peux-tu écrire et exécuter du code dans cette leçon C++ Academy ?
Oui. Chaque leçon C++ Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.
Toutes les leçons de ce cours
- Opérateurs arithmétiques et de comparaison
- Opérateurs d’insertion et d’extraction de flux
- Opérateurs d’indice et d’appel de fonction
- Opérateur de comparaison à trois voies en C++20