0Pricing
C++ Academy · Lección

Operadores de subíndice y llamada a función

Sobrecargue [] y () para que los tipos se comporten como contenedores u objetos invocables.

Operadores de subíndice y llamada a función es una lección gratuita de C++ Academy en CoddyKit. Esta es la lección 3 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de C++ Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de C++ Academy incluye 4 lecciones en total.

operator[] — Acceso indexado

Sobrecargue [] para que su tipo pueda usarse como un array. Resulta útil para contenedores, matrices y clases de imágenes.

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

Dos sobrecargas: const y no const

Proporcione ambas. Al invocar el operador sobre una instancia const, se selecciona la sobrecarga const; la versión no const permite realizar asignaciones.

Comprobación de límites

Por convención, operator[] no comprueba los límites. Proporcione un método at() independiente que lance una excepción, como hace la biblioteca estándar.

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

Subíndice multidimensional (C++23)

C++23 añadió el subíndice con elementos separados por comas: m[i, j]. Las versiones anteriores necesitan una llamada a función o subíndices encadenados.

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

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

operator() — Llamada a función

Sobrecargue () para que las instancias se puedan invocar. Se usa para functors, indexación de matrices y predicados configurables.

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

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

Functors con estado

El operador de llamada a función funciona con variables miembro, lo que permite crear un objeto invocable con estado.

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

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

Uso con algoritmos de la STL

Pase instancias de functors a los algoritmos en lugar de funciones.

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

Operadores con varios argumentos

Tanto [] (antes de C++23) como () se pueden sobrecargar con cualquier número de argumentos. Antes de C++23, () es la opción más flexible para el acceso tipo matriz.

Devolver referencias frente a valores

Devuelva una referencia para permitir asignaciones a través del subíndice. Devuelva por valor en los tipos de solo lectura.

Objetos proxy

Si operator[] necesita devolver un objeto complejo, como un campo de bits, devuelva una clase proxy pequeña con operadores de conversión y asignación.

Ejemplos del mundo real

Usos habituales:

  • std::vector::operator[]
  • std::map::operator[] — inserta las claves ausentes
  • Clases de matrices: m(i, j)
  • Functors para algoritmos

Comprobación rápida

¿Cómo puede hacer que las instancias de una clase se puedan invocar como una función?

Resumen

Sobrecargue [] para el acceso indexado y proporcione sobrecargas const y no const. Sobrecargue () para que las instancias se puedan invocar; es la base de los functors y las lambdas.

Preguntas frecuentes

¿La lección «Operadores de subíndice y llamada a función» es gratis?

Sí — el texto completo de «Operadores de subíndice y llamada a función» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de C++ Academy, actualiza a CoddyKit PRO. El curso de C++ Academy incluye 4 lecciones en total.

¿Qué aprenderé en «Operadores de subíndice y llamada a función»?

Sobrecargue [] y () para que los tipos se comporten como contenedores u objetos invocables. Practicas C++ Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.

¿Necesito experiencia previa para empezar C++ Academy?

No se requiere experiencia previa. C++ Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 3 de 4.

¿Cuánto tiempo toma la lección «Operadores de subíndice y llamada a función»?

La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.

¿Puedo escribir y ejecutar código en esta lección de C++ Academy?

Sí. Cada lección de C++ Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.

Todas las lecciones de este curso

  1. Operadores aritméticos y de comparación
  2. Operadores de inserción y extracción de streams
  3. Operadores de subíndice y llamada a función
  4. Operador de comparación de tres vías en C++20
← Volver a C++ Academy