Sobrecargue el operador de soporte en C++

Naila Saad Siddiqui 12 octubre 2023
  1. Sobrecarga de operadores en C++
  2. Sobrecargue el operador de soporte [] en C++
Sobrecargue el operador de soporte en C++

Esta guía de programación trivial sobrecarga el operador de corchete ([]) para que sea un getter and setter para los objetos de clase.

Primero, hagamos una breve introducción a la sobrecarga de operadores.

Sobrecarga de operadores en C++

La idea de modificar el comportamiento de los operadores mientras se trabaja con tipos de datos definidos por el usuario, como clases y estructuras, se conoce como sobrecarga de operadores. Estas son similares a las funciones miembro en una clase llamada cuando se usa ese operador.

Por ejemplo, supongamos que queremos determinar qué empleado en una clase de Empleados tiene un salario más alto que los demás. El operador > puede estar sobrecargado para comparar el miembro de datos salary de los dos objetos y devolver el resultado.

La sintaxis para la sobrecarga del operador es la siguiente:

class ClassIdentifier {
  [AccessSpecifier] : ReturnType operator OperatorSymbol([list of arguments]) {
    // definition
  }
};

El especificador de acceso opcional debería ser preferentemente público. Si lo hace privado, solo se podrá acceder a la función de sobrecarga desde dentro de la clase.

Esto suele ser indeseable en la mayoría de los casos.

Tenga en cuenta que operador es una palabra clave utilizada para la sobrecarga de operadores; después de eso, especificamos el símbolo del operador que debe sobrecargarse. Recuerde que no podemos sobrecargar operadores para tipos de datos fundamentales como int, char, float, etc.

Sobrecargue el operador de soporte [] en C++

También podemos sobrecargar el operador de paréntesis [] para que pueda usarse para obtener y establecer el valor en un objeto de clase.

Por ejemplo, tenemos la clase MyClass con una matriz como miembro de datos. Para acceder a los elementos de esa matriz usando el nombre del objeto, podemos sobrecargar el operador de paréntesis [] de esta manera:

class MyClass {
 private:
  int arr[5];

 public:
  int operator[](int i) const { return arr[i]; }  // for getting value
  int& operator[](int i) { return arr[i]; }       // for setting value
};

Tenga en cuenta que hemos devuelto la referencia al índice dado para establecer el valor para que el usuario pueda cambiarlo. Puede usarlo en el programa del controlador de esta manera:

int main() {
  MyClass obj;
  obj[0] = 100;            // setting values
  obj[1] = 200;            // setting values
  cout << obj[0] << endl;  // getting values
  cout << obj[1] << endl;  // getting values
  return 0;
}

En la función main() anterior, cuando obj[0] = 100; se ejecuta, llama a la segunda función sobrecargada con 0 como argumento de i. El método setter sobrecargado devuelve una referencia entera al espacio de memoria del índice 0 de arr.

El valor a la derecha del operador de asignación (=) ahora se asigna en la ubicación devuelta. Por lo tanto, al índice 0 del miembro de datos de obj se le dará un valor de 100.

Combinemos las piezas de código anteriores en un programa ejecutable completo.

#include <iostream>
using namespace std;
class MyClass {
 private:
  int arr[5];

 public:
  int operator[](int i) const { return arr[i]; }  // for getting value
  int& operator[](int i) { return arr[i]; }       // for setting value
};

int main() {
  MyClass obj;
  obj[0] = 100;            // setting values
  obj[1] = 200;            // setting values
  cout << obj[0] << endl;  // getting values
  cout << obj[1] << endl;  // getting values
  return 0;
}

Producción :

100
200

Artículo relacionado - C++ Operator